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

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

Issue 2965393002: Use FastaMessage instead of String. Part 1. (Closed)
Patch Set: 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
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) { 98 if (template != null) {
101 codeArguments.add('template: r"$template"'); 99 codeArguments.add('template: r"""$template"""');
102 } 100 }
103 if (tip != null) { 101 if (tip != null) {
104 codeArguments.add('tip: r"$tip"'); 102 codeArguments.add('tip: r"""$tip"""');
105 } 103 }
106 if (analyzerCode != null) { 104 if (analyzerCode != null) {
107 codeArguments.add('analyzerCode: "$analyzerCode"'); 105 codeArguments.add('analyzerCode: "$analyzerCode"');
108 } 106 }
109 if (dart2jsCode != null) { 107 if (dart2jsCode != null) {
110 codeArguments.add('dart2jsCode: "$dart2jsCode"'); 108 codeArguments.add('dart2jsCode: "$dart2jsCode"');
111 } 109 }
112 110
113 codeArguments.add("format: _format$name"); 111 if (parameters.isEmpty && conversions.isEmpty && arguments.isEmpty) {
112 return """
113 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
114 const BoundFastaCode code$name =
115 const BoundFastaCode(\"$name\", ${codeArguments.join(', ')});
116 """;
117 }
118
119 codeArguments.add("bind: _bind$name");
114 120
115 List<String> messageArguments = <String>[]; 121 List<String> messageArguments = <String>[];
116 messageArguments.add(interpolate("message", template)); 122 messageArguments.add(interpolate("message", template));
117 if (tip != null) { 123 if (tip != null) {
118 messageArguments.add(interpolate("tip", tip)); 124 messageArguments.add(interpolate("tip", tip));
119 } 125 }
120 messageArguments.add("arguments: { ${arguments.join(', ')} }"); 126 messageArguments.add("arguments: { ${arguments.join(', ')} }");
121 127
122 return """ 128 return """
123 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. 129 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
124 const FastaCode<_$name> code$name = 130 const UnboundFastaCode<_$name> code$name =
125 const FastaCode<_$name>(\"$name\", ${codeArguments.join(', ')}); 131 const UnboundFastaCode<_$name>(\"$name\", ${codeArguments.join(', ')});
126
127 typedef FastaMessage _$name(${parameters.join(', ')});
128 132
129 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. 133 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
130 FastaMessage _format$name(${parameters.join(', ')}) { 134 typedef _$name =
131 ${conversions.join('\n ')} 135 FastaMessage Function(Uri, int) Function(${parameters.join(', ')});
132 return new FastaMessage( 136
133 uri, 137 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
134 charOffset, 138 FastaMessage Function(Uri, int) _bind$name(${parameters.join(', ')}) {
135 code$name, 139 FastaMessage bind(Uri uri, int charOffset) {
136 ${messageArguments.join(', ')}); 140 ${conversions.join('\n ')}
141 return new FastaMessage(
142 uri,
143 charOffset,
144 code$name,
145 ${messageArguments.join(', ')});
146 }
147 return bind;
137 } 148 }
138 """; 149 """;
139 } 150 }
OLDNEW
« pkg/front_end/lib/src/fasta/fasta_codes.dart ('K') | « pkg/front_end/messages.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698