Skip to content

Commit 75e6d58

Browse files
committed
🎨 The formatter will only use the tall-style if the SDK constraint is ^3.7
1 parent faa7570 commit 75e6d58

File tree

9 files changed

+83
-49
lines changed

9 files changed

+83
-49
lines changed

‎packages/core/lib/flutter_generator.dart‎

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import 'dart:io' show stdout, Directory, File;
22

3-
import 'package:dart_style/dart_style.dart' show DartFormatter;
43
import 'package:flutter_gen_core/generators/assets_generator.dart';
54
import 'package:flutter_gen_core/generators/colors_generator.dart';
65
import 'package:flutter_gen_core/generators/fonts_generator.dart';
76
import 'package:flutter_gen_core/settings/config.dart';
87
import 'package:flutter_gen_core/utils/file.dart';
8+
import 'package:flutter_gen_core/utils/formatter.dart';
99
import 'package:path/path.dart' show join, normalize;
1010

1111
class FlutterGenerator {
@@ -29,15 +29,10 @@ class FlutterGenerator {
2929
return;
3030
}
3131

32+
final formatter = buildDartFormatterFromConfig(config);
3233
final flutter = config.pubspec.flutter;
3334
final flutterGen = config.pubspec.flutterGen;
3435
final output = config.pubspec.flutterGen.output;
35-
final lineLength = config.pubspec.flutterGen.lineLength;
36-
final formatter = DartFormatter(
37-
languageVersion: DartFormatter.latestLanguageVersion,
38-
pageWidth: lineLength,
39-
lineEnding: '\n',
40-
);
4136

4237
void defaultWriter(String contents, String path) {
4338
final file = File(path);

‎packages/core/lib/settings/pubspec.dart‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:json_annotation/json_annotation.dart';
2+
import 'package:pub_semver/pub_semver.dart' show VersionConstraint;
23

34
part 'pubspec.g.dart';
45

@@ -8,6 +9,7 @@ part 'pubspec.g.dart';
89
class Pubspec {
910
const Pubspec({
1011
required this.packageName,
12+
required this.environment,
1113
required this.flutterGen,
1214
required this.flutter,
1315
});
@@ -17,13 +19,58 @@ class Pubspec {
1719
@JsonKey(name: 'name', required: true)
1820
final String packageName;
1921

22+
@JsonKey(name: 'environment', fromJson: _environmentFromJson)
23+
final Map<String, VersionConstraint?> environment;
24+
2025
@JsonKey(name: 'flutter_gen', required: true)
2126
final FlutterGen flutterGen;
2227

2328
@JsonKey(name: 'flutter', required: true)
2429
final Flutter flutter;
2530
}
2631

32+
// https://github.com/dart-lang/tools/blob/d3b54e89c4f71a114554499dec00ecd87a491b2b/pkgs/pubspec_parse/lib/src/pubspec.dart#L203
33+
Map<String, VersionConstraint?> _environmentFromJson(Map? source) {
34+
if (source == null) {
35+
return {};
36+
}
37+
return source.map((k, value) {
38+
final key = k as String;
39+
if (key == 'dart') {
40+
// github.com/dart-lang/pub/blob/d84173eeb03c3/lib/src/pubspec.dart#L342
41+
// 'dart' is not allowed as a key!
42+
throw CheckedFromJsonException(
43+
source,
44+
'dart',
45+
'VersionConstraint',
46+
'Use "sdk" to for Dart SDK constraints.',
47+
badKey: true,
48+
);
49+
}
50+
51+
VersionConstraint? constraint;
52+
if (value == null) {
53+
constraint = null;
54+
} else if (value is String) {
55+
try {
56+
constraint = VersionConstraint.parse(value);
57+
} on FormatException catch (e) {
58+
throw CheckedFromJsonException(source, key, 'Pubspec', e.message);
59+
}
60+
61+
return MapEntry(key, constraint);
62+
} else {
63+
throw CheckedFromJsonException(
64+
source,
65+
key,
66+
'VersionConstraint',
67+
'`$value` is not a String.',
68+
);
69+
}
70+
return MapEntry(key, constraint);
71+
});
72+
}
73+
2774
@JsonSerializable(disallowUnrecognizedKeys: false)
2875
class Flutter {
2976
const Flutter({

‎packages/core/lib/settings/pubspec.g.dart‎

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'package:dart_style/dart_style.dart' show DartFormatter;
2+
import 'package:pub_semver/pub_semver.dart' show VersionConstraint;
3+
4+
import '../settings/config.dart' show Config;
5+
6+
/// The formatter will only use the tall-style if the SDK constraint is ^3.7.
7+
DartFormatter buildDartFormatterFromConfig(Config config) {
8+
final sdkConstraint = config.pubspec.environment['sdk'];
9+
final useShort = switch (sdkConstraint) {
10+
final c? => c.allowsAny(VersionConstraint.parse('<3.7.0')),
11+
_ => true,
12+
};
13+
return DartFormatter(
14+
languageVersion: useShort
15+
? DartFormatter.latestShortStyleLanguageVersion
16+
: DartFormatter.latestLanguageVersion,
17+
pageWidth: config.pubspec.flutterGen.lineLength,
18+
lineEnding: '\n',
19+
);
20+
}

‎packages/core/lib/utils/identifer.dart‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/// 2. Built-in identifiers.
88
/// 3. Limited reserved words.
99
/// 4. Reserved words, which can’t be identifiers.
10-
///
10+
// ignore: unnecessary_library_name
1111
library identifer;
1212

1313
// 1. Contextual keywords, which have meaning only in specific places. They’re

‎packages/core/test/assets_gen_test.dart‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import 'dart:io';
22

3-
import 'package:dart_style/dart_style.dart';
43
import 'package:dartx/dartx.dart';
54
import 'package:flutter_gen_core/generators/assets_generator.dart';
65
import 'package:flutter_gen_core/generators/generator_helper.dart';
76
import 'package:flutter_gen_core/settings/asset_type.dart';
87
import 'package:flutter_gen_core/settings/config.dart';
98
import 'package:flutter_gen_core/utils/error.dart';
9+
import 'package:flutter_gen_core/utils/formatter.dart';
1010
import 'package:flutter_gen_core/utils/string.dart';
1111
import 'package:test/test.dart';
1212

@@ -59,11 +59,7 @@ void main() {
5959
test('Assets with No lists on pubspec.yaml', () async {
6060
final pubspec = File('test_resources/pubspec_assets_no_list.yaml');
6161
final config = loadPubspecConfig(pubspec);
62-
final formatter = DartFormatter(
63-
languageVersion: dartFormatterLanguageVersion,
64-
pageWidth: config.pubspec.flutterGen.lineLength,
65-
lineEnding: '\n',
66-
);
62+
final formatter = buildDartFormatterFromConfig(config);
6763

6864
expect(
6965
() => generateAssets(

‎packages/core/test/colors_gen_test.dart‎

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import 'dart:io';
22

3-
import 'package:dart_style/dart_style.dart';
43
import 'package:flutter_gen_core/generators/colors_generator.dart';
54
import 'package:flutter_gen_core/settings/color_path.dart';
65
import 'package:flutter_gen_core/settings/config.dart';
76
import 'package:flutter_gen_core/utils/error.dart';
7+
import 'package:flutter_gen_core/utils/formatter.dart';
88
import 'package:test/test.dart';
99

1010
import 'gen_test_helper.dart';
@@ -22,11 +22,7 @@ void main() {
2222
test('Wrong colors settings on pubspec.yaml', () async {
2323
final pubspec = File('test_resources/pubspec_colors_no_inputs.yaml');
2424
final config = loadPubspecConfig(pubspec);
25-
final formatter = DartFormatter(
26-
languageVersion: dartFormatterLanguageVersion,
27-
pageWidth: config.pubspec.flutterGen.lineLength,
28-
lineEnding: '\n',
29-
);
25+
final formatter = buildDartFormatterFromConfig(config);
3026

3127
expect(
3228
() => generateColors(
@@ -41,11 +37,7 @@ void main() {
4137
test('Wrong colors settings on pubspec.yaml', () async {
4238
final pubspec = File('test_resources/pubspec_colors_no_inputs_list.yaml');
4339
final config = loadPubspecConfig(pubspec);
44-
final formatter = DartFormatter(
45-
languageVersion: dartFormatterLanguageVersion,
46-
pageWidth: config.pubspec.flutterGen.lineLength,
47-
lineEnding: '\n',
48-
);
40+
final formatter = buildDartFormatterFromConfig(config);
4941

5042
expect(
5143
() {

‎packages/core/test/fonts_gen_test.dart‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import 'dart:io';
22

3-
import 'package:dart_style/dart_style.dart';
43
import 'package:flutter_gen_core/generators/fonts_generator.dart';
54
import 'package:flutter_gen_core/settings/config.dart';
65
import 'package:flutter_gen_core/utils/error.dart';
6+
import 'package:flutter_gen_core/utils/formatter.dart';
77
import 'package:test/test.dart';
88

99
import 'gen_test_helper.dart';
@@ -22,11 +22,7 @@ void main() {
2222
final config = loadPubspecConfig(
2323
File('test_resources/pubspec_fonts_no_family.yaml'),
2424
);
25-
final formatter = DartFormatter(
26-
languageVersion: dartFormatterLanguageVersion,
27-
pageWidth: config.pubspec.flutterGen.lineLength,
28-
lineEnding: '\n',
29-
);
25+
final formatter = buildDartFormatterFromConfig(config);
3026

3127
expect(
3228
() => generateFonts(FontsGenConfig.fromConfig(config), formatter),

‎packages/core/test/gen_test_helper.dart‎

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
import 'dart:io';
22

3-
import 'package:dart_style/dart_style.dart';
43
import 'package:flutter_gen_core/flutter_generator.dart';
54
import 'package:flutter_gen_core/generators/assets_generator.dart';
65
import 'package:flutter_gen_core/generators/colors_generator.dart';
76
import 'package:flutter_gen_core/generators/fonts_generator.dart';
87
import 'package:flutter_gen_core/settings/config.dart';
8+
import 'package:flutter_gen_core/utils/formatter.dart';
99
import 'package:path/path.dart' as p;
1010
import 'package:test/test.dart';
1111

12-
final dartFormatterLanguageVersion = DartFormatter.latestLanguageVersion;
13-
1412
Future<void> clearTestResults() async {}
1513

1614
Future<List<String>> runAssetsGen(
@@ -35,11 +33,7 @@ Future<List<String>> runAssetsGen(
3533

3634
stdout.writeln('[DEBUG] test: Generate from API...');
3735
final config = loadPubspecConfig(pubspecFile, buildFile: buildFile);
38-
final formatter = DartFormatter(
39-
languageVersion: dartFormatterLanguageVersion,
40-
pageWidth: config.pubspec.flutterGen.lineLength,
41-
lineEnding: '\n',
42-
);
36+
final formatter = buildDartFormatterFromConfig(config);
4337

4438
final actual = await generateAssets(
4539
AssetsGenConfig.fromConfig(pubspecFile, config),
@@ -79,11 +73,7 @@ Future<List<String>> runColorsGen(
7973

8074
final pubspecFile = File(pubspec);
8175
final config = loadPubspecConfig(pubspecFile);
82-
final formatter = DartFormatter(
83-
languageVersion: dartFormatterLanguageVersion,
84-
pageWidth: config.pubspec.flutterGen.lineLength,
85-
lineEnding: '\n',
86-
);
76+
final formatter = buildDartFormatterFromConfig(config);
8777

8878
final actual = generateColors(
8979
pubspecFile,
@@ -123,11 +113,7 @@ Future<List<String>> runFontsGen(
123113

124114
final pubspecFile = File(pubspec);
125115
final config = loadPubspecConfig(pubspecFile);
126-
final formatter = DartFormatter(
127-
languageVersion: dartFormatterLanguageVersion,
128-
pageWidth: config.pubspec.flutterGen.lineLength,
129-
lineEnding: '\n',
130-
);
116+
final formatter = buildDartFormatterFromConfig(config);
131117

132118
final actual = generateFonts(
133119
FontsGenConfig.fromConfig(config),

0 commit comments

Comments
 (0)