Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Side by Side Diff: pkg/front_end/tool/_fasta/generate_messages.dart

Issue 2965393002: Use FastaMessage instead of String. Part 1. (Closed)
Patch Set: Add type variable to Code. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/front_end/messages.yaml ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:io'; 5 import 'dart:io';
6 6
7 import 'dart:isolate'; 7 import 'dart:isolate';
8 8
9 import 'package:yaml/yaml.dart' show loadYaml; 9 import 'package:yaml/yaml.dart' show loadYaml;
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 port.close(); 47 port.close();
48 } 48 }
49 49
50 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+"); 50 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+");
51 51
52 String compileTemplate(String name, String template, String tip, 52 String compileTemplate(String name, String template, String tip,
53 String analyzerCode, String dart2jsCode) { 53 String analyzerCode, String dart2jsCode) {
54 var parameters = new Set<String>(); 54 var parameters = new Set<String>();
55 var conversions = new Set<String>(); 55 var conversions = new Set<String>();
56 var arguments = new Set<String>(); 56 var arguments = new Set<String>();
57 parameters.add("Uri uri");
58 parameters.add("int charOffset");
59 for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) { 57 for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) {
60 switch (match[0]) { 58 switch (match[0]) {
61 case "#character": 59 case "#character":
62 parameters.add("String character"); 60 parameters.add("String character");
63 arguments.add("'character': character"); 61 arguments.add("'character': character");
64 break; 62 break;
65 63
66 case "#unicode": 64 case "#unicode":
67 parameters.add("int codePoint"); 65 parameters.add("int codePoint");
68 conversions.add("String unicode = " 66 conversions.add("String unicode = "
(...skipping 17 matching lines...) Expand all
86 arguments.add("'string': string"); 84 arguments.add("'string': string");
87 break; 85 break;
88 86
89 default: 87 default:
90 throw "Unhandled placeholder in template: ${match[0]}"; 88 throw "Unhandled placeholder in template: ${match[0]}";
91 } 89 }
92 } 90 }
93 91
94 String interpolate(String name, String text) { 92 String interpolate(String name, String text) {
95 return "$name: " 93 return "$name: "
96 "\"${text.replaceAll(r'$', r'\$').replaceAll('#', '\$')}\""; 94 "\"\"\"${text.replaceAll(r'$', r'\$').replaceAll('#', '\$')}\"\"\"";
97 } 95 }
98 96
99 List<String> codeArguments = <String>[]; 97 List<String> codeArguments = <String>[];
100 if (template != null) {
101 codeArguments.add('template: r"$template"');
102 }
103 if (tip != null) {
104 codeArguments.add('tip: r"$tip"');
105 }
106 if (analyzerCode != null) { 98 if (analyzerCode != null) {
107 codeArguments.add('analyzerCode: "$analyzerCode"'); 99 codeArguments.add('analyzerCode: "$analyzerCode"');
108 } 100 }
109 if (dart2jsCode != null) { 101 if (dart2jsCode != null) {
110 codeArguments.add('dart2jsCode: "$dart2jsCode"'); 102 codeArguments.add('dart2jsCode: "$dart2jsCode"');
111 } 103 }
112 104
113 codeArguments.add("format: _format$name"); 105 if (parameters.isEmpty && conversions.isEmpty && arguments.isEmpty) {
106 if (template != null) {
107 codeArguments.add('message: r"""$template"""');
108 }
109 if (tip != null) {
110 codeArguments.add('tip: r"""$tip"""');
111 }
112
113 return """
114 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
115 const Code<Null> code$name = message$name;
116
117 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
118 const MessageCode message$name =
119 const MessageCode(\"$name\", ${codeArguments.join(', ')});
120 """;
121 }
122
123 List<String> templateArguments = <String>[];
124 if (template != null) {
125 templateArguments.add('messageTemplate: r"""$template"""');
126 }
127 if (tip != null) {
128 templateArguments.add('tipTemplate: r"""$tip"""');
129 }
130
131 templateArguments.add("withArguments: _withArguments$name");
114 132
115 List<String> messageArguments = <String>[]; 133 List<String> messageArguments = <String>[];
116 messageArguments.add(interpolate("message", template)); 134 messageArguments.add(interpolate("message", template));
117 if (tip != null) { 135 if (tip != null) {
118 messageArguments.add(interpolate("tip", tip)); 136 messageArguments.add(interpolate("tip", tip));
119 } 137 }
120 messageArguments.add("arguments: { ${arguments.join(', ')} }"); 138 messageArguments.add("arguments: { ${arguments.join(', ')} }");
121 139
122 return """ 140 return """
123 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. 141 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
124 const FastaCode<_$name> code$name = 142 const Template<Message Function(${parameters.join(', ')})> template$name =
125 const FastaCode<_$name>(\"$name\", ${codeArguments.join(', ')}); 143 const Template<Message Function(${parameters.join(', ')})>(
126 144 ${templateArguments.join(', ')});
127 typedef FastaMessage _$name(${parameters.join(', ')});
128 145
129 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. 146 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
130 FastaMessage _format$name(${parameters.join(', ')}) { 147 const Code<Message Function(${parameters.join(', ')})> code$name =
148 const Code<Message Function(${parameters.join(', ')})>(
149 \"$name\", template$name, ${codeArguments.join(', ')});
150
151 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
152 Message _withArguments$name(${parameters.join(', ')}) {
131 ${conversions.join('\n ')} 153 ${conversions.join('\n ')}
132 return new FastaMessage( 154 return new Message(
133 uri,
134 charOffset,
135 code$name, 155 code$name,
136 ${messageArguments.join(', ')}); 156 ${messageArguments.join(', ')});
137 } 157 }
138 """; 158 """;
139 } 159 }
OLDNEW
« no previous file with comments | « pkg/front_end/messages.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698