@@ -6,8 +6,10 @@ import 'package:macros/macros.dart';
6
6
final _flutterMaterial = Uri .parse ('package:flutter/material.dart' );
7
7
final _dartCore = Uri .parse ('dart:core' );
8
8
9
+ /// A macro that generates a `ThemeExtension` class for a given class.
9
10
macro class Thema
10
11
implements ClassTypesMacro , ClassDeclarationsMacro , ClassDefinitionMacro {
12
+ /// Creates a new instance of `Thema` .
11
13
const Thema ();
12
14
13
15
@override
@@ -16,6 +18,7 @@ macro class Thema
16
18
ClassTypeBuilder builder,
17
19
) async {
18
20
final superType =
21
+ // ignore: deprecated_member_use
19
22
await builder.resolveIdentifier (_flutterMaterial, 'ThemeExtension' );
20
23
final superTypeCode = NamedTypeAnnotationCode (
21
24
name: superType,
@@ -60,15 +63,17 @@ macro class Thema
60
63
required MemberDeclarationBuilder builder,
61
64
}) async {
62
65
final fields = await builder.fieldsOf (clazz);
63
- final hasUnexpectedFields = fields.any ((field) =>
64
- field.hasAbstract ||
65
- field.hasConst ||
66
- field.hasExternal ||
67
- ! field.hasFinal ||
68
- field.hasInitializer ||
69
- field.hasLate ||
70
- field.hasStatic ||
71
- field.type.isNullable);
66
+ final hasUnexpectedFields = fields.any (
67
+ (field) =>
68
+ field.hasAbstract ||
69
+ field.hasConst ||
70
+ field.hasExternal ||
71
+ ! field.hasFinal ||
72
+ field.hasInitializer ||
73
+ field.hasLate ||
74
+ field.hasStatic ||
75
+ field.type.isNullable,
76
+ );
72
77
if (hasUnexpectedFields) {
73
78
builder.report (
74
79
Diagnostic (
@@ -90,11 +95,13 @@ macro class Thema
90
95
}) async {
91
96
final fields = await builder.fieldsOf (clazz);
92
97
final constructorParameterCodes = fields
93
- .map ((field) => RawCode .fromParts ([
94
- 'required' ,
95
- ' ' ,
96
- field.identifier,
97
- ]))
98
+ .map (
99
+ (field) => RawCode .fromParts ([
100
+ 'required' ,
101
+ ' ' ,
102
+ field.identifier,
103
+ ]),
104
+ )
98
105
.toList ();
99
106
final constructorName = clazz.identifier.name;
100
107
final constructorCode = DeclarationCode .fromParts (
@@ -135,6 +142,7 @@ macro class Thema
135
142
required MemberDeclarationBuilder builder,
136
143
}) async {
137
144
final doubleIdentifier =
145
+ // ignore: deprecated_member_use
138
146
await builder.resolveIdentifier (_dartCore, 'double' );
139
147
final leapFirstParameterCode = ParameterCode (
140
148
keywords: ['covariant' ],
@@ -181,24 +189,26 @@ macro class Thema
181
189
return RawCode .fromParts ([
182
190
'$fieldName :' ,
183
191
' ' ,
184
- '$ fieldName ' ,
192
+ fieldName,
185
193
' ?? ' ,
186
194
field.identifier,
187
195
]);
188
196
},
189
197
).toList ();
190
- final copyWithFunctionBodyCode = FunctionBodyCode .fromParts ([
191
- '{' ,
192
- RawCode .fromParts ([
193
- 'return' ,
194
- ' ' ,
195
- clazz.identifier,
196
- '(' ,
197
- ]).indent (size: 4 ),
198
- ...instancePareterCodes.trailingComma ().indent (size: 6 ),
199
- ');' .indent (size: 4 ),
200
- '}' .indent (),
201
- ].joinAsCode ('\n ' ));
198
+ final copyWithFunctionBodyCode = FunctionBodyCode .fromParts (
199
+ [
200
+ '{' ,
201
+ RawCode .fromParts ([
202
+ 'return' ,
203
+ ' ' ,
204
+ clazz.identifier,
205
+ '(' ,
206
+ ]).indent (size: 4 ),
207
+ ...instancePareterCodes.trailingComma ().indent (size: 6 ),
208
+ ');' .indent (size: 4 ),
209
+ '}' .indent (),
210
+ ].joinAsCode ('\n ' ),
211
+ );
202
212
203
213
final builder =
204
214
await typeDefinisionBuilder.buildMethod (copyWithDeclaration.identifier);
@@ -221,8 +231,10 @@ macro class Thema
221
231
name: 'other' ,
222
232
);
223
233
final themeExtensionIdentifier = await typeDefinisionBuilder
234
+ // ignore: deprecated_member_use
224
235
.resolveIdentifier (_flutterMaterial, 'ThemeExtension' );
225
236
final doubleIdentifier =
237
+ // ignore: deprecated_member_use
226
238
await typeDefinisionBuilder.resolveIdentifier (_dartCore, 'double' );
227
239
final leapSecondParameterCode = ParameterCode (
228
240
type: NamedTypeAnnotationCode (name: doubleIdentifier),
@@ -243,7 +255,8 @@ macro class Thema
243
255
'$fieldName :' ,
244
256
' ' ,
245
257
field.identifier,
246
- '.lerp(${leapFirstParameterCode .name }.$fieldName , ${leapSecondParameterCode .name })' ,
258
+ // ignore: lines_longer_than_80_chars
259
+ '.lerp(${leapFirstParameterCode .name }.$fieldName , ${leapSecondParameterCode .name },)' ,
247
260
],
248
261
);
249
262
}
@@ -254,28 +267,33 @@ macro class Thema
254
267
fieldTypeCode,
255
268
'.lerp(' ,
256
269
field.identifier,
270
+ // ignore: lines_longer_than_80_chars
257
271
', ${leapFirstParameterCode .name }.$fieldName , ${leapSecondParameterCode .name })!' ,
258
272
],
259
273
);
260
274
}),
261
275
);
262
- final leapFunctionBodyCode = FunctionBodyCode .fromParts ([
263
- '{' ,
264
- RawCode .fromParts ([
265
- 'if (${leapFirstParameterCode .name } == null) {' .indent (size: 4 ),
266
- 'return this;' .indent (size: 6 ),
267
- '}' .indent (size: 4 ),
268
- ].joinAsCode ('\n ' )),
269
- RawCode .fromParts ([
270
- 'return' ,
271
- ' ' ,
272
- clazz.identifier,
273
- '(' ,
274
- ]).indent (size: 4 ),
275
- ...instancePareterCodes.trailingComma ().indent (size: 6 ),
276
- ');' .indent (size: 4 ),
277
- '}' .indent (),
278
- ].joinAsCode ('\n ' ));
276
+ final leapFunctionBodyCode = FunctionBodyCode .fromParts (
277
+ [
278
+ '{' ,
279
+ RawCode .fromParts (
280
+ [
281
+ 'if (${leapFirstParameterCode .name } == null) {' .indent (size: 4 ),
282
+ 'return this;' .indent (size: 6 ),
283
+ '}' .indent (size: 4 ),
284
+ ].joinAsCode ('\n ' ),
285
+ ),
286
+ RawCode .fromParts ([
287
+ 'return' ,
288
+ ' ' ,
289
+ clazz.identifier,
290
+ '(' ,
291
+ ]).indent (size: 4 ),
292
+ ...instancePareterCodes.trailingComma ().indent (size: 6 ),
293
+ ');' .indent (size: 4 ),
294
+ '}' .indent (),
295
+ ].joinAsCode ('\n ' ),
296
+ );
279
297
280
298
final builder =
281
299
await typeDefinisionBuilder.buildMethod (leapDeclaration.identifier);
@@ -294,12 +312,12 @@ extension _Indent<T extends Object> on T {
294
312
295
313
extension _Indents <T extends Object > on List <T > {
296
314
List <Code > indent ({int size = 2 }) {
297
- return this . map ((element) => element.indent (size: size)).toList ();
315
+ return map ((element) => element.indent (size: size)).toList ();
298
316
}
299
317
}
300
318
301
319
extension _Commas <T extends Object > on List <T > {
302
320
List <Code > trailingComma () {
303
- return this . map ((element) => RawCode .fromParts ([element, ',' ])).toList ();
321
+ return map ((element) => RawCode .fromParts ([element, ',' ])).toList ();
304
322
}
305
323
}
0 commit comments