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

Side by Side Diff: pkg/dart_messages/bin/publish.dart

Issue 1763373002: Support multiple categories per message. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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:convert'; 5 import 'dart:convert';
6 import 'dart:io' as io; 6 import 'dart:io' as io;
7 7
8 import '../lib/shared_messages.dart'; 8 import '../lib/shared_messages.dart';
9 9
10 const String jsonPath = '../lib/generated/shared_messages.json'; 10 const String jsonPath = '../lib/generated/shared_messages.json';
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 if (index == null) { 165 if (index == null) {
166 throw "Couldn't find hole-position for $holeName $holeMap"; 166 throw "Couldn't find hole-position for $holeName $holeMap";
167 } 167 }
168 return "{$index}"; 168 return "{$index}";
169 } else { 169 } else {
170 return "{${seenHoles++}}"; 170 return "{${seenHoles++}}";
171 } 171 }
172 }); 172 });
173 } 173 }
174 174
175 String camlToAllCaps(String input) {
176 StringBuffer out = new StringBuffer();
177 for (int i = 0; i < input.length; i++) {
178 String c = input[i];
179 if (c.toUpperCase() == c) {
180 out.write("_$c");
181 } else {
182 out.write(c.toUpperCase());
183 }
184 }
185 return out.toString();
186 }
187
175 /// Emits the messages in analyzer format. 188 /// Emits the messages in analyzer format.
176 /// 189 ///
177 /// Messages are encoded as instances of `ErrorCode` classes where the 190 /// Messages are encoded as instances of `ErrorCode` classes where the
178 /// corresponding class is given by the `category` field of the Message. 191 /// corresponding class is given by the `category` field of the Message.
179 /// 192 ///
180 /// All instances are stored as top-level const variables. 193 /// All instances are stored as top-level const variables.
181 /// 194 ///
182 /// A sample output looks as follows: 195 /// A sample output looks as follows:
183 /// 196 ///
184 /// const FooCategoryErrorCode EXAMPLE_MESSAGE = const FooCategoryErrorCode( 197 /// const FooCategoryErrorCode EXAMPLE_MESSAGE = const FooCategoryErrorCode(
185 /// "EXAMPLE_MESSAGE", 198 /// "EXAMPLE_MESSAGE",
186 /// "Don't use {0} with {1}", 199 /// "Don't use {0} with {1}",
187 /// "Just don't do it"); 200 /// "Just don't do it");
188 void emitAnalyzer() { 201 void emitAnalyzer() {
189 var input = MESSAGES; 202 var input = MESSAGES;
190 var outPath = io.Platform.script.resolve(analyzerPath).toFilePath(); 203 var outPath = io.Platform.script.resolve(analyzerPath).toFilePath();
191 print("Emitting analyzer:"); 204 print("Emitting analyzer:");
192 print(" Input: ${input.length} entries"); 205 print(" Input: ${input.length} entries");
193 print(" Output: $outPath"); 206 print(" Output: $outPath");
194 207
195 StringBuffer out = new StringBuffer(); 208 StringBuffer out = new StringBuffer();
196 out.writeln(copyrightHeader); 209 out.writeln(copyrightHeader);
197 out.writeln(dontEditWarning); 210 out.writeln(dontEditWarning);
198 out.writeln("import 'package:analyzer/src/generated/error.dart';"); 211 out.writeln("import 'package:analyzer/src/generated/error.dart';");
199 out.writeln("import 'package:analyzer/src/generated/parser.dart' " 212 out.writeln("import 'package:analyzer/src/generated/parser.dart' "
200 "show ParserErrorCode;"); 213 "show ParserErrorCode;");
201 input.forEach((name, message) { 214 input.forEach((name, message) {
202 if (!message.usedBy.contains(Platform.analyzer)) return; 215 if (!message.usedBy.contains(Platform.analyzer)) return;
216 List<Category> categories = message.categories;
217 bool hasMultipleCategories = categories.length != 1;
218 for (Category category in categories) {
219 String className = category.name + "Code";
220 String analyzerName =
221 hasMultipleCategories ? "$name${camlToAllCaps(category.name)}" : name;
222 out.writeln();
223 out.writeln("const $className $analyzerName = const $className(");
224 out.writeln(" '$name',");
203 225
204 Category category = message.category; 226 String template = message.template;
205 String className = category.name + "Code"; 227 List holeOrder = message.templateHoleOrder;
206 out.writeln(); 228 String analyzerTemplate = convertToAnalyzerTemplate(template, holeOrder);
207 out.writeln("const $className $name = const $className("); 229 out.write(" ");
208 out.writeln(" '$name',"); 230 out.write(escapeString(analyzerTemplate));
209 231 out.write(",\n ");
210 String template = message.template; 232 out.write(escapeString(message.howToFix));
211 List holeOrder = message.templateHoleOrder; 233 out.writeln("); // Generated. Don't edit.");
212 String analyzerTemplate = convertToAnalyzerTemplate(template, holeOrder); 234 }
213 out.write(" ");
214 out.write(escapeString(analyzerTemplate));
215 out.write(",\n ");
216 out.write(escapeString(message.howToFix));
217 out.writeln("); // Generated. Don't edit.");
218 }); 235 });
219 236
220 new io.File(outPath).writeAsStringSync(out.toString()); 237 new io.File(outPath).writeAsStringSync(out.toString());
221 print("Emitting analyzer done."); 238 print("Emitting analyzer done.");
222 } 239 }
223 240
224 /// Translates the shared messages in `../lib/shared_messages.dart` to JSON, 241 /// Translates the shared messages in `../lib/shared_messages.dart` to JSON,
225 /// dart2js, and analyzer formats. 242 /// dart2js, and analyzer formats.
226 /// 243 ///
227 /// Emits the json-output to [jsonPath], the dart2js-output to [dart2jsPath], 244 /// Emits the json-output to [jsonPath], the dart2js-output to [dart2jsPath],
228 /// and the analyzer-output to [analyzerPath]. 245 /// and the analyzer-output to [analyzerPath].
229 void main() { 246 void main() {
230 emitJson(); 247 emitJson();
231 emitDart2js(); 248 emitDart2js();
232 emitAnalyzer(); 249 emitAnalyzer();
233 } 250 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/diagnostics/messages.dart ('k') | pkg/dart_messages/lib/generated/shared_messages.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698