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

Side by Side Diff: lib/src/js/type_printer.dart

Issue 1676463002: Type annotations instead of closure comments. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 10 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
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
Jennifer Messerly 2016/02/09 16:41:57 2016? :)
ochafik 2016/02/10 18:12:45 Done.
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.
4
5 part of js_ast;
6
7 abstract class _TypePrinterBase implements TypeRefVisitor {
8 void out(String s);
9 void visit(Node node);
10
11 outSeparated(String separator, Iterable items, [action(dynamic item)]) {
Jennifer Messerly 2016/02/09 16:41:58 void ?
ochafik 2016/02/10 18:12:45 Done.
12 action ??= visit;
13 var first = true;
14 for (var item in items) {
15 if (first) {
16 first = false;
17 } else {
18 out(separator);
19 }
20 action(item);
21 }
22 }
23
24 outTypeParams(Iterable<TypeRef> typeParams) {
Jennifer Messerly 2016/02/09 16:41:58 void ?
ochafik 2016/02/10 18:12:45 Done.
25 if (typeParams.isNotEmpty) {
26 out('<');
27 outSeparated(", ", typeParams);
28 out('>');
29 }
30 }
31
32 @override
33 visitQualifiedTypeRef(QualifiedTypeRef node) {
34 outSeparated(".", node.path);
35 }
36 }
37
38 abstract class TypeScriptTypePrinter extends _TypePrinterBase {
39
40 void _outTypeAnnotation(TypeRef type) {
41 if (type is OptionalTypeRef) {
42 out("?: ");
43 visit(type.type);
44 } else {
45 out(": ");
46 visit(type);
47 }
48 }
49
50 @override
51 visitGenericTypeRef(GenericTypeRef node) {
52 if (node.rawType is FunctionTypeRef) {
53 outTypeParams(node.typeParams);
54 visit(node.rawType);
55 } else {
56 visit(node.rawType);
57 outTypeParams(node.typeParams);
58 }
59 }
60
61 @override
62 visitArrayTypeRef(ArrayTypeRef node) {
63 if (node.elementType == null) {
64 out("Array");
65 } else {
66 visit(node.elementType);
67 out("[]");
68 }
69 }
70
71 @override
72 visitOptionalTypeRef(OptionalTypeRef node) {
73 visit(node.type);
74 }
75
76 @override
77 visitRecordTypeRef(RecordTypeRef node) {
78 out('{');
79 outSeparated(", ", node.types.keys, (Identifier name) {
80 var type = node.types[name];
81 visit(name);
82 _outTypeAnnotation(type);
83 });
84 out('}');
85 }
86
87 @override
88 visitUnionTypeRef(UnionTypeRef node) {
89 outSeparated("|", node.types.where((t) => !t.isNull));
90 }
91
92 @override
93 visitFunctionTypeRef(FunctionTypeRef node) {
94 if (node.returnType == null) {
95 out('Function');
96 } else {
97 out('(');
98 outSeparated(", ", node.paramTypes.keys, (name) {
99 var paramType = node.paramTypes[name];
100 visit(name);
101 _outTypeAnnotation(paramType);
102 });
103 out(') => ');
104 visit(node.returnType);
105 }
106 }
107
108 @override
109 visitAnyTypeRef(AnyTypeRef node) {
110 out("any");
111 }
112
113 @override
114 visitUnknownTypeRef(UnknownTypeRef node) {
115 out("any");
116 }
117 }
118
119 class ClosureTypePrinter extends _TypePrinterBase implements NodeVisitor {
120 final _buffer = new StringBuffer();
121
122 @override
123 void out(String s) => _buffer.write(s);
124
125 @override
126 void visit(Node node) => node.accept(this);
127
128 noSuchMethod(Invocation i) => super.noSuchMethod(i);
129
130 @override
131 visitGenericTypeRef(GenericTypeRef node) {
132 visit(node.rawType);
133 outTypeParams(node.typeParams);
134 }
135
136 @override
137 visitIdentifier(Identifier node) {
138 //out(localNamer.getName(node));
139 out(node.name);
140 }
141
142 @override
143 visitAccess(PropertyAccess node) {
144 var selector = node.selector;
145 assert(selector is LiteralString);
146 if (selector is! LiteralString) {
147 out("?");
148 return;
149 }
150 visit(node.receiver);
151 out(".");
152 out(selector.valueWithoutQuotes);
153 }
154
155 @override toString() => _buffer.toString();
156
157 @override
158 visitArrayTypeRef(ArrayTypeRef node) {
159 out("Array");
160 if (node.elementType != null) {
161 out("<");
162 visit(node.elementType);
163 out(">");
164 }
165 }
166
167 @override
168 visitOptionalTypeRef(OptionalTypeRef node) {
169 visit(node.type);
170 out("=");
171 }
172
173 @override
174 visitRecordTypeRef(RecordTypeRef node) {
175 out('{');
176 outSeparated(", ", node.types.keys, (Identifier name) {
177 var type = node.types[name];
178 visit(name);
179 out(": ");
180 visit(type is OptionalTypeRef ? type.orUndefined() : type);
181 });
182 out('}');
183 }
184
185 @override
186 visitAnyTypeRef(AnyTypeRef node) {
187 out("*");
188 }
189
190 @override
191 visitUnknownTypeRef(UnknownTypeRef node) {
192 out("?");
193 }
194
195 @override
196 visitUnionTypeRef(UnionTypeRef node) {
197 out("(");
198 outSeparated("|", node.types);
199 out(")");
200 }
201
202 @override
203 visitFunctionTypeRef(FunctionTypeRef node) {
204 out('function(');
205 if (node.paramTypes == null) {
206 out("...*");
207 } else {
208 outSeparated(", ", node.paramTypes.values);
209 }
210 out(')');
211 if (node.returnType != null) {
212 out(":");
213 visit(node.returnType);
214 }
215 }
216 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698