diff --git a/dev/snippets/config/templates/freeform.tmpl b/dev/snippets/config/templates/freeform.tmpl index 82e2ec90bc..99a2bf7f70 100644 --- a/dev/snippets/config/templates/freeform.tmpl +++ b/dev/snippets/config/templates/freeform.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateful_widget.tmpl b/dev/snippets/config/templates/stateful_widget.tmpl index 5f595ba103..a6ee714ab2 100644 --- a/dev/snippets/config/templates/stateful_widget.tmpl +++ b/dev/snippets/config/templates/stateful_widget.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateful_widget_material.tmpl b/dev/snippets/config/templates/stateful_widget_material.tmpl index 67881ea898..01731d57e2 100644 --- a/dev/snippets/config/templates/stateful_widget_material.tmpl +++ b/dev/snippets/config/templates/stateful_widget_material.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateful_widget_scaffold.tmpl b/dev/snippets/config/templates/stateful_widget_scaffold.tmpl index a096f4ce48..d8968a0133 100644 --- a/dev/snippets/config/templates/stateful_widget_scaffold.tmpl +++ b/dev/snippets/config/templates/stateful_widget_scaffold.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateful_widget_scaffold_center.tmpl b/dev/snippets/config/templates/stateful_widget_scaffold_center.tmpl index ce2c39a219..5317ccf108 100644 --- a/dev/snippets/config/templates/stateful_widget_scaffold_center.tmpl +++ b/dev/snippets/config/templates/stateful_widget_scaffold_center.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateful_widget_scaffold_center_freeform_state.tmpl b/dev/snippets/config/templates/stateful_widget_scaffold_center_freeform_state.tmpl index 783630ac19..cc9fba7587 100644 --- a/dev/snippets/config/templates/stateful_widget_scaffold_center_freeform_state.tmpl +++ b/dev/snippets/config/templates/stateful_widget_scaffold_center_freeform_state.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateless_widget.tmpl b/dev/snippets/config/templates/stateless_widget.tmpl index 0cbaaeaeb5..43901db1bc 100644 --- a/dev/snippets/config/templates/stateless_widget.tmpl +++ b/dev/snippets/config/templates/stateless_widget.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateless_widget_material.tmpl b/dev/snippets/config/templates/stateless_widget_material.tmpl index 66c0bef9e3..a79076f2c2 100644 --- a/dev/snippets/config/templates/stateless_widget_material.tmpl +++ b/dev/snippets/config/templates/stateless_widget_material.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateless_widget_scaffold.tmpl b/dev/snippets/config/templates/stateless_widget_scaffold.tmpl index e875d06160..977f106dac 100644 --- a/dev/snippets/config/templates/stateless_widget_scaffold.tmpl +++ b/dev/snippets/config/templates/stateless_widget_scaffold.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/config/templates/stateless_widget_scaffold_center.tmpl b/dev/snippets/config/templates/stateless_widget_scaffold_center.tmpl index f5b8848e41..42dce92594 100644 --- a/dev/snippets/config/templates/stateless_widget_scaffold_center.tmpl +++ b/dev/snippets/config/templates/stateless_widget_scaffold_center.tmpl @@ -1,4 +1,4 @@ -// Flutter code sample for {{id}} +// Flutter code sample for {{element}} {{description}} diff --git a/dev/snippets/lib/snippets.dart b/dev/snippets/lib/snippets.dart index 2272106052..c5bf96023c 100644 --- a/dev/snippets/lib/snippets.dart +++ b/dev/snippets/lib/snippets.dart @@ -61,7 +61,7 @@ class SnippetGenerator { /// Injects the [injections] into the [template], and turning the /// "description" injection into a comment. Only used for /// [SnippetType.application] snippets. - String interpolateTemplate(List<_ComponentTuple> injections, String template) { + String interpolateTemplate(List<_ComponentTuple> injections, String template, Map metadata) { final RegExp moustacheRegExp = RegExp('{{([^}]+)}}'); return template.replaceAllMapped(moustacheRegExp, (Match match) { if (match[1] == 'description') { @@ -86,9 +86,9 @@ class SnippetGenerator { // mustache reference, since we want to allow the sections to be // "optional" in the input: users shouldn't be forced to add an empty // "```dart preamble" section if that section would be empty. - return injections - .firstWhere((_ComponentTuple tuple) => tuple.name == match[1], orElse: () => null) - ?.mergedContent ?? ''; + final _ComponentTuple result = injections + .firstWhere((_ComponentTuple tuple) => tuple.name == match[1], orElse: () => null); + return result?.mergedContent ?? (metadata[match[1]] ?? '').toString(); } }).trim(); } @@ -130,6 +130,7 @@ class SnippetGenerator { 'language': language ?? 'dart', 'serial': '', 'id': metadata['id'], + 'element': metadata['element'] ?? '', 'app': '', }; if (type == SnippetType.application) { @@ -242,7 +243,7 @@ class SnippetGenerator { exit(1); } final String templateContents = _loadFileAsUtf8(templateFile); - String app = interpolateTemplate(snippetData, templateContents); + String app = interpolateTemplate(snippetData, templateContents, metadata); try { app = formatter.format(app); diff --git a/dev/snippets/test/snippets_test.dart b/dev/snippets/test/snippets_test.dart index 73ca67ea4c..20a72b56d6 100644 --- a/dev/snippets/test/snippets_test.dart +++ b/dev/snippets/test/snippets_test.dart @@ -27,10 +27,11 @@ void main() { configuration.skeletonsDirectory.createSync(recursive: true); template = File(path.join(configuration.templatesDirectory.path, 'template.tmpl')); template.writeAsStringSync(''' +// Flutter code sample for {{element}} {{description}} -{{code-preamble}} +{{code-my-preamble}} main() { {{code}} @@ -78,6 +79,7 @@ void main() { } ``` '''); + final File outputFile = File(path.join(tmpDir.absolute.path, 'snippet_out.txt')); final String html = generator.generate( inputFile, @@ -85,7 +87,9 @@ void main() { template: 'template', metadata: { 'id': 'id', + 'element': 'MyElement', }, + output: outputFile, ); expect(html, contains('
HTML Bits
')); expect(html, contains('
More HTML Bits
')); @@ -97,6 +101,12 @@ void main() { '//\n' '// On several lines.\n')); expect(html, contains('void main() {')); + + final String outputContents = outputFile.readAsStringSync(); + expect(outputContents, contains('// Flutter code sample for MyElement')); + expect(outputContents, contains('A description of the snippet.')); + expect(outputContents, contains('void main() {')); + expect(outputContents, contains("const String name = 'snippet';")); }); test('generates sample snippets', () async {