Skip to content

Commit

Permalink
Merge branch 'main' into feat/gapless-playback
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexV525 authored Sep 7, 2024
2 parents 6e7b904 + d29f6bd commit bd46812
Show file tree
Hide file tree
Showing 10 changed files with 574 additions and 23 deletions.
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,24 @@ flutter:
style: italic
```

### build.yaml

You can also configure generate options in the `build.yaml`, it will be read before the `pubspec.yaml` if it exists.


```yaml
# build.yaml
# ...
targets:
$default:
builders:
flutter_gen:
options:
output: lib/build_gen/ # Optional (default: lib/gen/)
line_length: 120 # Optional (default: 80)
```

## Available Parsers

### Assets
Expand Down
14 changes: 13 additions & 1 deletion packages/command/bin/flutter_gen_command.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@ void main(List<String> args) {
defaultsTo: 'pubspec.yaml',
);

parser.addOption(
'build',
abbr: 'b',
help: 'Set the path of build.yaml.',
defaultsTo: 'build.yaml',
);

parser.addFlag(
'help',
abbr: 'h',
Expand Down Expand Up @@ -45,5 +52,10 @@ void main(List<String> args) {
}

final pubspecPath = safeCast<String>(results['config']);
FlutterGenerator(File(pubspecPath!).absolute).build();
final pubspecFile = File(pubspecPath!).absolute;

final buildPath = safeCast<String>(results['build']);
final buildFile = File(buildPath!).absolute;

FlutterGenerator(pubspecFile, buildFile: buildFile).build();
}
4 changes: 3 additions & 1 deletion packages/core/lib/flutter_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,20 @@ import 'package:path/path.dart';
class FlutterGenerator {
const FlutterGenerator(
this.pubspecFile, {
this.buildFile,
this.assetsName = 'assets.gen.dart',
this.colorsName = 'colors.gen.dart',
this.fontsName = 'fonts.gen.dart',
});

final File pubspecFile;
final File? buildFile;
final String assetsName;
final String colorsName;
final String fontsName;

Future<void> build({Config? config, FileWriter? writer}) async {
config ??= loadPubspecConfigOrNull(pubspecFile);
config ??= loadPubspecConfigOrNull(pubspecFile, buildFile: buildFile);
if (config == null) return;

final flutter = config.pubspec.flutter;
Expand Down
48 changes: 37 additions & 11 deletions packages/core/lib/settings/config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,49 @@ class Config {
final File pubspecFile;
}

Config loadPubspecConfig(File pubspecFile) {
stdout.writeln('$flutterGenVersion Loading ... '
'${normalize(join(
basename(pubspecFile.parent.path),
basename(pubspecFile.path),
))}');
final content = pubspecFile.readAsStringSync();
final userMap = loadYaml(content) as Map?;
Config loadPubspecConfig(File pubspecFile, {File? buildFile}) {
final pubspecLocaleHint = normalize(
join(basename(pubspecFile.parent.path), basename(pubspecFile.path)),
);
final buildLocaleHint = buildFile != null && buildFile.existsSync()
? join(basename(buildFile.parent.path), basename(buildFile.path))
: '';

stdout.writeln(
'$flutterGenVersion Loading ...',
);

final defaultMap = loadYaml(configDefaultYamlContent) as Map?;
final mergedMap = mergeMap([defaultMap, userMap]);

final pubspecContent = pubspecFile.readAsStringSync();
final pubspecMap = loadYaml(pubspecContent) as Map?;

var mergedMap = mergeMap([defaultMap, pubspecMap]);
stdout.writeln(
'Reading FlutterGen options from $pubspecLocaleHint',
);

if (buildFile != null && buildFile.existsSync()) {
final buildContent = buildFile.readAsStringSync();
final rawMap = loadYaml(buildContent) as Map?;
final optionBuildMap = rawMap?['targets']?[r'$default']?['builders']?['flutter_gen']?['options'];

if (optionBuildMap != null) {
final buildMap = {'flutter_gen': optionBuildMap};
mergedMap = mergeMap([mergedMap, buildMap]);
stdout.writeln(
'Reading FlutterGen options from $buildLocaleHint',
);
}
}

final pubspec = Pubspec.fromJson(mergedMap);
return Config._(pubspec: pubspec, pubspecFile: pubspecFile);
}

Config? loadPubspecConfigOrNull(File pubspecFile) {
Config? loadPubspecConfigOrNull(File pubspecFile, {File? buildFile}) {
try {
return loadPubspecConfig(pubspecFile);
return loadPubspecConfig(pubspecFile, buildFile: buildFile);
} on FileSystemException catch (e) {
stderr.writeln(e.message);
} on InvalidSettingsException catch (e) {
Expand Down
9 changes: 9 additions & 0 deletions packages/core/test/assets_gen_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,15 @@ void main() {
final names = got.map((e) => e.name);
expect(names.sorted(), tests.values.sorted());
});

test('Assets on pubspec_assets.yaml and override with build_assets.yaml ', () async {
const pubspec = 'test_resources/pubspec_assets.yaml';
const build = 'test_resources/build_assets.yaml';
const fact = 'test_resources/actual_data/build_assets.gen.dart';
const generated = 'test_resources/lib/build_gen/assets.gen.dart';

await expectedAssetsGen(pubspec, generated, fact, build: build);
});
});

group('Test generatePackageNameForConfig', () {
Expand Down
22 changes: 22 additions & 0 deletions packages/core/test/flutter_gen_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -179,5 +179,27 @@ void main() {
expect(File('test_resources/lib/gen/$fonts').existsSync(), false);
expect(File('test_resources/lib/gen/$colors').existsSync(), false);
});

test('With build_output.yaml', () async {
const pubspec = 'test_resources/pubspec_normal.yaml';
const build = 'test_resources/build_output.yaml';
const assets = 'build_assets.gen.dart';
const colors = 'build_colors.gen.dart';
const fonts = 'build_fonts.gen.dart';

await FlutterGenerator(
File(pubspec),
buildFile: File(build),
assetsName: assets,
colorsName: colors,
fontsName: fonts,
).build();
expect(File('test_resources/lib/build_gen/$assets').readAsStringSync(),
isNotEmpty);
expect(File('test_resources/lib/build_gen/$fonts').readAsStringSync(),
isNotEmpty);
expect(File('test_resources/lib/build_gen/$colors').readAsStringSync(),
isNotEmpty);
});
});
}
23 changes: 15 additions & 8 deletions packages/core/test/gen_test_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,21 @@ Future<void> clearTestResults() async {}
Future<List<String>> runAssetsGen(
String pubspec,
String generated,
String fact,
) async {
String fact, {
String? build,
}) async {
final pubspecFile = File(pubspec);

File? buildFile;
if (build != null) buildFile = File(build);

await FlutterGenerator(
File(pubspec),
pubspecFile,
buildFile: buildFile,
assetsName: p.basename(generated),
).build();

final pubspecFile = File(pubspec);
final config = loadPubspecConfig(pubspecFile);
final config = loadPubspecConfig(pubspecFile, buildFile: buildFile);
final formatter = DartFormatter(
pageWidth: config.pubspec.flutterGen.lineLength,
lineEnding: '\n',
Expand All @@ -42,9 +48,10 @@ Future<List<String>> runAssetsGen(
Future<void> expectedAssetsGen(
String pubspec,
String generated,
String fact,
) async {
final results = await runAssetsGen(pubspec, generated, fact);
String fact, {
String? build,
}) async {
final results = await runAssetsGen(pubspec, generated, fact, build: build);
final actual = results.first, expected = results.last;
expect(
File(generated).readAsStringSync(),
Expand Down
Loading

0 comments on commit bd46812

Please sign in to comment.