Skip to content

Commit 287f751

Browse files
authored
feat: allow very_good create . (#996)
1 parent 142f3f2 commit 287f751

File tree

18 files changed

+1333
-1774
lines changed

18 files changed

+1333
-1774
lines changed

e2e/test/commands/create/flame_game/flame_game_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void main() {
5151
['coverage/lcov.info', '-o', 'coverage'],
5252
workingDirectory: workingDirectory,
5353
);
54-
expect(testCoverageResult.stdout, contains('lines......: 97.9%'));
54+
expect(testCoverageResult.stdout, contains('lines......: 97.8%'));
5555
}),
5656
);
5757
}

lib/src/commands/create/commands/create_subcommand.dart

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,53 @@ abstract class CreateSubCommand extends Command<int> {
117117

118118
/// Gets the output [Directory].
119119
Directory get outputDirectory {
120-
final directory = argResults['output-directory'] as String? ?? '.';
121-
return Directory(directory);
120+
final directoryParameter = argResults['output-directory'] as String?;
121+
final args = argResults.rest;
122+
123+
if (args.first == '.' && directoryParameter != null) {
124+
usageException(
125+
'''--output-directory cannot be specified when using "very_good create <template> ."''',
126+
);
127+
}
128+
129+
if (directoryParameter != null) {
130+
return Directory('$directoryParameter/$projectName');
131+
}
132+
133+
return Directory(args.first);
122134
}
123135

124136
/// Gets the project name.
125137
String get projectName {
126138
final args = argResults.rest;
127-
_validateProjectName(args);
128-
return args.first;
139+
140+
if (args.isEmpty) {
141+
usageException('No option specified for the project name.');
142+
}
143+
144+
if (args.length > 1) {
145+
usageException('Multiple project names specified.');
146+
}
147+
148+
final projectName = args.first;
149+
if (projectName.contains('/')) {
150+
usageException('Project name cannot contain "/".');
151+
}
152+
153+
final name = args.first == '.'
154+
? path.basename(Directory.current.path)
155+
: projectName;
156+
157+
final isValidPackageName = _isValidPackageName(name);
158+
159+
if (!isValidPackageName) {
160+
usageException(
161+
'"$name" is not a valid package name.\n\n'
162+
'See https://dart.dev/tools/pub/pubspec#name for more information.',
163+
);
164+
}
165+
166+
return name;
129167
}
130168

131169
/// Gets the description for the project.
@@ -147,27 +185,6 @@ abstract class CreateSubCommand extends Command<int> {
147185
return match != null && match.end == name.length;
148186
}
149187

150-
void _validateProjectName(List<String> args) {
151-
logger.detail('Validating project name; args: $args');
152-
153-
if (args.isEmpty) {
154-
usageException('No option specified for the project name.');
155-
}
156-
157-
if (args.length > 1) {
158-
usageException('Multiple project names specified.');
159-
}
160-
161-
final name = args.first;
162-
final isValidProjectName = _isValidPackageName(name);
163-
if (!isValidProjectName) {
164-
usageException(
165-
'"$name" is not a valid package name.\n\n'
166-
'See https://dart.dev/tools/pub/pubspec#name for more information.',
167-
);
168-
}
169-
}
170-
171188
Future<MasonGenerator> _getGeneratorForTemplate() async {
172189
try {
173190
final brick = Brick.version(
@@ -209,10 +226,7 @@ abstract class CreateSubCommand extends Command<int> {
209226
final files = await generator.generate(target, vars: vars, logger: logger);
210227
generateProgress.complete('Generated ${files.length} file(s)');
211228

212-
await template.onGenerateComplete(
213-
logger,
214-
Directory(path.join(target.dir.path, projectName)),
215-
);
229+
await template.onGenerateComplete(logger, outputDirectory);
216230

217231
return ExitCode.success.code;
218232
}

lib/src/commands/create/templates/very_good_core/very_good_core_bundle.dart

Lines changed: 304 additions & 525 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_dart_cli/very_good_dart_cli_bundle.dart

Lines changed: 28 additions & 43 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_dart_package/very_good_dart_package_bundle.dart

Lines changed: 27 additions & 40 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_docs_site/very_good_docs_site_bundle.dart

Lines changed: 40 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_flame_game/very_good_flame_game_bundle.dart

Lines changed: 352 additions & 573 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_flutter_package/very_good_flutter_package_bundle.dart

Lines changed: 27 additions & 40 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_flutter_plugin/very_good_flutter_plugin_bundle.dart

Lines changed: 234 additions & 257 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/src/commands/create/templates/very_good_wear_app/very_good_wear_app_bundle.dart

Lines changed: 104 additions & 157 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)