Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/app_ui_package.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateAppUiPackage extends CreateSubCommand with Publishable {
CreateAppUiPackage({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
});

@override
Expand Down
52 changes: 16 additions & 36 deletions lib/src/commands/create/commands/create_subcommand.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,15 @@ import 'package:very_good_cli/src/commands/create/templates/templates.dart';
// A valid Dart identifier that can be used for a package, i.e. no
// capital letters.
// https://dart.dev/guides/language/language-tour#important-concepts
final RegExp _identifierRegExp = RegExp('[a-z_][a-z0-9_]*');
final RegExp _orgNameRegExp = RegExp(r'^[a-zA-Z][\w-]*(\.[a-zA-Z][\w-]*)+$');
final _identifierRegExp = RegExp('[a-z_][a-z0-9_]*');
final _orgNameRegExp = RegExp(r'^[a-zA-Z][\w-]*(\.[a-zA-Z][\w-]*)+$');

const _defaultOrgName = 'com.example.verygoodcore';
const _defaultDescription = 'A Very Good Project created by Very Good CLI.';

/// A method which returns a [Future<MasonGenerator>] given a [MasonBundle].
typedef MasonGeneratorFromBundle = Future<MasonGenerator> Function(MasonBundle);

/// A method which returns a [Future<MasonGenerator>] given a [Brick].
typedef MasonGeneratorFromBrick = Future<MasonGenerator> Function(Brick);

/// {@template create_subcommand}
/// Generic class for sub commands of [CreateCommand].
/// {@endtemplate}
Expand All @@ -50,9 +47,7 @@ abstract class CreateSubCommand extends Command<int> {
CreateSubCommand({
required this.logger,
@visibleForTesting required MasonGeneratorFromBundle? generatorFromBundle,
@visibleForTesting required MasonGeneratorFromBrick? generatorFromBrick,
}) : _generatorFromBundle = generatorFromBundle ?? MasonGenerator.fromBundle,
_generatorFromBrick = generatorFromBrick ?? MasonGenerator.fromBrick {
}) : _generatorFromBundle = generatorFromBundle ?? MasonGenerator.fromBundle {
argParser
..addOption(
'output-directory',
Expand All @@ -69,20 +64,20 @@ abstract class CreateSubCommand extends Command<int> {
// Add the templates arg if the command has multiple templates.
if (this is MultiTemplates) {
final multiTemplates = this as MultiTemplates;
final defaultTemplateName = multiTemplates.defaultTemplateName;
final templates = multiTemplates.templates;
final defaultTemplateName = multiTemplates.defaultTemplateName;

argParser.addOption(
'template',
abbr: 't',
help: 'The template used to generate this new project.',
defaultsTo: defaultTemplateName,
allowed: templates.map((element) => element.name).toList(),
allowed: templates.map((template) => template.name).toList(),
allowedHelp: templates.fold<Map<String, String>>(
{},
(previousValue, element) => {
...previousValue,
element.name: element.help,
(previousTemplate, template) => {
...previousTemplate,
template.name: template.help,
},
),
);
Expand All @@ -109,7 +104,6 @@ abstract class CreateSubCommand extends Command<int> {
/// The logger user to notify the user of the command's progress.
final Logger logger;
final MasonGeneratorFromBundle _generatorFromBundle;
final MasonGeneratorFromBrick _generatorFromBrick;

/// [ArgResults] which can be overridden for testing.
@visibleForTesting
Expand Down Expand Up @@ -185,31 +179,17 @@ abstract class CreateSubCommand extends Command<int> {
return match != null && match.end == name.length;
}

Future<MasonGenerator> _getGeneratorForTemplate() async {
try {
final brick = Brick.version(
name: template.bundle.name,
version: '^${template.bundle.version}',
);
logger.detail(
'''Building generator from brick: ${brick.name} ${brick.location.version}''',
);
return await _generatorFromBrick(brick);
} on Exception catch (error) {
logger.detail('Building generator from brick failed: $error');
}
logger.detail(
'''Building generator from bundle ${template.bundle.name} ${template.bundle.version}''',
);
return _generatorFromBundle(template.bundle);
}

@override
Future<int> run() async {
final template = this.template;
final generator = await _getGeneratorForTemplate();
final result = await runCreate(generator, template);
final bundle = template.bundle;

logger.detail(
'Building generator from bundle ${bundle.name} ${bundle.version}',
);

final generator = await _generatorFromBundle(bundle);
final result = await runCreate(generator, template);
return result;
}

Expand Down Expand Up @@ -325,7 +305,7 @@ mixin MultiTemplates on CreateSubCommand {
final templateName =
argResults['template'] as String? ?? defaultTemplateName;

return templates.firstWhere((element) => element.name == templateName);
return templates.firstWhere((template) => template.name == templateName);
}
}

Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/dart_cli.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateDartCLI extends CreateSubCommand with Publishable {
CreateDartCLI({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
}) {
argParser.addOption(
'executable-name',
Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/dart_package.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateDartPackage extends CreateSubCommand with Publishable {
CreateDartPackage({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
});

@override
Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/docs_site.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateDocsSite extends CreateSubCommand {
CreateDocsSite({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
}) {
argParser.addOption(
'org-name',
Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/flame_game.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateFlameGame extends CreateSubCommand with OrgName {
CreateFlameGame({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
}) {
argParser.addMultiOption(
'platforms',
Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/flutter_app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateFlutterApp extends CreateSubCommand with OrgName, MultiTemplates {
CreateFlutterApp({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
}) {
argParser
..addOption(
Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/flutter_package.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateFlutterPackage extends CreateSubCommand with Publishable {
CreateFlutterPackage({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
});

@override
Expand Down
1 change: 0 additions & 1 deletion lib/src/commands/create/commands/flutter_plugin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CreateFlutterPlugin extends CreateSubCommand with Publishable, OrgName {
CreateFlutterPlugin({
required super.logger,
required super.generatorFromBundle,
required super.generatorFromBrick,
}) {
argParser.addMultiOption(
'platforms',
Expand Down
9 changes: 0 additions & 9 deletions lib/src/commands/create/create.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,12 @@ class CreateCommand extends Command<int> {
CreateCommand({
required Logger logger,
@visibleForTesting MasonGeneratorFromBundle? generatorFromBundle,
@visibleForTesting MasonGeneratorFromBrick? generatorFromBrick,
}) {
// very_good create app_ui_package <args>
addSubcommand(
CreateAppUiPackage(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -30,7 +28,6 @@ class CreateCommand extends Command<int> {
CreateFlutterApp(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -39,7 +36,6 @@ class CreateCommand extends Command<int> {
CreateDartPackage(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -48,7 +44,6 @@ class CreateCommand extends Command<int> {
CreateDartCLI(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -57,7 +52,6 @@ class CreateCommand extends Command<int> {
CreateDocsSite(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -66,7 +60,6 @@ class CreateCommand extends Command<int> {
CreateFlutterPackage(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -75,7 +68,6 @@ class CreateCommand extends Command<int> {
CreateFlutterPlugin(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);

Expand All @@ -84,7 +76,6 @@ class CreateCommand extends Command<int> {
CreateFlameGame(
logger: logger,
generatorFromBundle: generatorFromBundle,
generatorFromBrick: generatorFromBrick,
),
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ void main() {
final command = CreateAppUiPackage(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('app_ui_package'));
expect(
Expand Down Expand Up @@ -166,8 +165,7 @@ void main() {
final argResults = _MockArgResults();
final command = CreateAppUiPackage(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
)..argResultOverrides = argResults;
when(
() => argResults['output-directory'] as String?,
Expand Down
4 changes: 1 addition & 3 deletions test/src/commands/create/commands/dart_cli_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ void main() {
final command = CreateDartCLI(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('dart_cli'));
expect(
Expand Down Expand Up @@ -168,8 +167,7 @@ void main() {
final argResults = _MockArgResults();
final command = CreateDartCLI(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
)..argResultOverrides = argResults;
when(
() => argResults['output-directory'] as String?,
Expand Down
4 changes: 1 addition & 3 deletions test/src/commands/create/commands/dart_package_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ void main() {
final command = CreateDartPackage(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('dart_package'));
expect(command.description, equals('Generate a Very Good Dart package.'));
Expand Down Expand Up @@ -163,8 +162,7 @@ void main() {
final argResults = _MockArgResults();
final command = CreateDartPackage(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
)..argResultOverrides = argResults;
when(
() => argResults['output-directory'] as String?,
Expand Down
4 changes: 1 addition & 3 deletions test/src/commands/create/commands/docs_site_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ void main() {
final command = CreateDocsSite(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('docs_site'));
expect(
Expand Down Expand Up @@ -167,8 +166,7 @@ void main() {
final argResults = _MockArgResults();
final command = CreateDocsSite(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
)..argResultOverrides = argResults;
when(
() => argResults['output-directory'] as String?,
Expand Down
4 changes: 1 addition & 3 deletions test/src/commands/create/commands/flame_game_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ void main() {
final command = CreateFlameGame(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('flame_game'));
expect(command.description, equals('Generate a Very Good Flame game.'));
Expand Down Expand Up @@ -176,8 +175,7 @@ void main() {
final argResults = _MockArgResults();
final command = CreateFlameGame(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
)..argResultOverrides = argResults;
when(
() => argResults['output-directory'] as String?,
Expand Down
10 changes: 3 additions & 7 deletions test/src/commands/create/commands/flutter_app_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ void main() {
final command = CreateFlutterApp(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('flutter_app'));
expect(
Expand Down Expand Up @@ -169,8 +168,7 @@ void main() {
await testMultiTemplateCommand(
multiTemplatesCommand: CreateFlutterApp(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
),
logger: logger,
hooks: hooks,
Expand Down Expand Up @@ -207,8 +205,7 @@ void main() {
await testMultiTemplateCommand(
multiTemplatesCommand: CreateFlutterApp(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
),
logger: logger,
hooks: hooks,
Expand Down Expand Up @@ -237,8 +234,7 @@ void main() {
outputDirectoryOverride: tempDirectory,
multiTemplatesCommand: CreateFlutterApp(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
),
logger: logger,
hooks: hooks,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ void main() {
final command = CreateFlutterPackage(
logger: logger,
generatorFromBundle: null,
generatorFromBrick: null,
);
expect(command.name, equals('flutter_package'));
expect(
Expand Down Expand Up @@ -166,8 +165,7 @@ void main() {
final argResults = _MockArgResults();
final command = CreateFlutterPackage(
logger: logger,
generatorFromBundle: (_) async => throw Exception('oops'),
generatorFromBrick: (_) async => generator,
generatorFromBundle: (_) async => generator,
)..argResultOverrides = argResults;
when(
() => argResults['output-directory'] as String?,
Expand Down
Loading
Loading