Parse `arb` files more completely
diff --git a/pkgs/messages_builder/lib/arb_parser.dart b/pkgs/messages_builder/lib/arb_parser.dart index de115a3..05710ef 100644 --- a/pkgs/messages_builder/lib/arb_parser.dart +++ b/pkgs/messages_builder/lib/arb_parser.dart
@@ -12,12 +12,17 @@ MessageListWithMetadata parseMessageFile(Map<String, dynamic> arb) { final locale = arb['@@locale'] as String?; final context = arb['@@context'] as String?; - final isReference = (arb['@@x-reference'] as bool?) ?? false; + final templatePath = arb['@@x-template'] as String?; final messages = arb.keys .where((key) => !key.startsWith('@')) .map((key) => parseMessage(arb, key, '${context}_$locale')) .toList(); - return MessageListWithMetadata(messages, locale, context, isReference); + return MessageListWithMetadata( + messages, + locale, + context, + templatePath == null, + ); } MessageWithMetadata parseMessage( @@ -35,6 +40,7 @@ final messageMetadata = arb['@$messageKey']; if (messageMetadata != null) { final metadata = messageMetadata as Map<String, dynamic>; + final description = metadata['description'] as String?; final placeholdersMap = metadata['placeholders'] as Map<String, dynamic>?; final placeholders = placeholdersMap ?? <String, dynamic>{}; final placeholdersWithMetadata = parsePlaceholderMetadata(placeholders); @@ -45,6 +51,7 @@ orElse: () => placeholder, )) .toList(); + message.description = description; } return message; } @@ -57,7 +64,12 @@ final placeholderName = entry.key; final placeholderData = entry.value as Map<String, dynamic>; final type = (placeholderData['type'] as String?) ?? 'String'; - placeholderTypes.add(Placeholder(placeholderName, type)); + final example = placeholderData['example'] as String?; + placeholderTypes.add(Placeholder( + name: placeholderName, + type: type, + example: example, + )); } return placeholderTypes; }
diff --git a/pkgs/messages_builder/lib/builder.dart b/pkgs/messages_builder/lib/builder.dart index b878c5c..ab28971 100644 --- a/pkgs/messages_builder/lib/builder.dart +++ b/pkgs/messages_builder/lib/builder.dart
@@ -117,15 +117,15 @@ for (var context in contexts) { final filesWithContext = arbFiles.where((arb) => arb.context == context); if (filesWithContext - .where((element) => element.isReferenceForContext) + .where((element) => element.isTemplateResource) .length > 1) { - throw ArgumentError('Multiple arb files are marked as reference'); + throw ArgumentError('Multiple arb files are marked as templates.'); } final localesInContext = filesWithContext.map((e) => e.locale).toList(); if (localesInContext.length != localesInContext.toSet().length) { throw ArgumentError( - 'Multiple arb files for the same context have the same locale'); + 'Multiple arb files for the same context have the same locale.'); } } } @@ -151,7 +151,7 @@ .length == 1; final shouldGenerateDartLib = - arb.isReferenceForContext || isOnlyResourceForContext; + arb.isTemplateResource || isOnlyResourceForContext; return shouldGenerateDartLib; } @@ -199,7 +199,7 @@ MessageFileResource(this.assetId, this.messageList, this.hash); String get locale => messageList.locale!; - bool get isReferenceForContext => messageList.isReference; + bool get isTemplateResource => messageList.isTemplate; List<MessageWithMetadata> get messages => messageList.messages; String? get context => messageList.context; }
diff --git a/pkgs/messages_builder/lib/message_with_metadata.dart b/pkgs/messages_builder/lib/message_with_metadata.dart index 4fc02b0..229600d 100644 --- a/pkgs/messages_builder/lib/message_with_metadata.dart +++ b/pkgs/messages_builder/lib/message_with_metadata.dart
@@ -8,30 +8,33 @@ final Message message; final String? name; List<Placeholder> placeholders; + String? description; MessageWithMetadata(this.message, List<String> arguments, this.name) - : placeholders = arguments.map(Placeholder.new).toList(); + : placeholders = + arguments.map((argument) => Placeholder(name: argument)).toList(); } class MessageListWithMetadata { final List<MessageWithMetadata> messages; final String? locale; final String? context; - final bool isReference; + final bool isTemplate; MessageListWithMetadata( this.messages, this.locale, this.context, - this.isReference, + this.isTemplate, ); } class Placeholder { final String name; final String type; + final String? example; - Placeholder(this.name, [this.type = 'String']); + Placeholder({required this.name, this.type = 'String', this.example}); @override String toString() {
diff --git a/pkgs/messages_builder/test/testdata/testarb.arb.dart b/pkgs/messages_builder/test/testdata/testarb.arb.dart index 1f765bc..9f6d61e 100644 --- a/pkgs/messages_builder/test/testdata/testarb.arb.dart +++ b/pkgs/messages_builder/test/testdata/testarb.arb.dart
@@ -5,7 +5,6 @@ String arbFile = ''' { "@@locale": "en", - "@@x-reference": true, "helloAndWelcome": "Welcome {firstName} von {lastName} <", "@helloAndWelcome": { "description": "Initial welcome message",