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

Side by Side Diff: mojo/public/tools/bindings/pylib/mojom/parse/ast.py

Issue 2888503002: Mojo bindings generator: introduce Stylizer to specify naming rules. (Closed)
Patch Set: Created 3 years, 7 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 | « mojo/public/tools/bindings/pylib/mojom/generate/translate.py ('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 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Node classes for the AST for a Mojo IDL file.""" 5 """Node classes for the AST for a Mojo IDL file."""
6 6
7 # Note: For convenience of testing, you probably want to define __eq__() methods 7 # Note: For convenience of testing, you probably want to define __eq__() methods
8 # for all node types; it's okay to be slightly lax (e.g., not compare filename 8 # for all node types; it's okay to be slightly lax (e.g., not compare filename
9 # and lineno). You may also define __repr__() to help with analyzing test 9 # and lineno). You may also define __repr__() to help with analyzing test
10 # failures, especially for more complex types. 10 # failures, especially for more complex types.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 if self.items: 77 if self.items:
78 self.filename = self.items[0].filename 78 self.filename = self.items[0].filename
79 self.lineno = self.items[0].lineno 79 self.lineno = self.items[0].lineno
80 80
81 81
82 class Definition(NodeBase): 82 class Definition(NodeBase):
83 """Represents a definition of anything that has a global name (e.g., enums, 83 """Represents a definition of anything that has a global name (e.g., enums,
84 enum values, consts, structs, struct fields, interfaces). (This does not 84 enum values, consts, structs, struct fields, interfaces). (This does not
85 include parameter definitions.) This class is meant to be subclassed.""" 85 include parameter definitions.) This class is meant to be subclassed."""
86 86
87 def __init__(self, name, **kwargs): 87 def __init__(self, mojom_name, **kwargs):
88 assert isinstance(name, str) 88 assert isinstance(mojom_name, str)
89 NodeBase.__init__(self, **kwargs) 89 NodeBase.__init__(self, **kwargs)
90 self.name = name 90 self.mojom_name = mojom_name
91 91
92 92
93 ################################################################################ 93 ################################################################################
94 94
95 95
96 class Attribute(NodeBase): 96 class Attribute(NodeBase):
97 """Represents an attribute.""" 97 """Represents an attribute."""
98 98
99 def __init__(self, key, value, **kwargs): 99 def __init__(self, key, value, **kwargs):
100 assert isinstance(key, str) 100 assert isinstance(key, str)
101 super(Attribute, self).__init__(**kwargs) 101 super(Attribute, self).__init__(**kwargs)
102 self.key = key 102 self.key = key
103 self.value = value 103 self.value = value
104 104
105 def __eq__(self, other): 105 def __eq__(self, other):
106 return super(Attribute, self).__eq__(other) and \ 106 return super(Attribute, self).__eq__(other) and \
107 self.key == other.key and \ 107 self.key == other.key and \
108 self.value == other.value 108 self.value == other.value
109 109
110 110
111 class AttributeList(NodeListBase): 111 class AttributeList(NodeListBase):
112 """Represents a list attributes.""" 112 """Represents a list attributes."""
113 113
114 _list_item_type = Attribute 114 _list_item_type = Attribute
115 115
116 116
117 class Const(Definition): 117 class Const(Definition):
118 """Represents a const definition.""" 118 """Represents a const definition."""
119 119
120 def __init__(self, name, typename, value, **kwargs): 120 def __init__(self, mojom_name, typename, value, **kwargs):
121 # The typename is currently passed through as a string. 121 # The typename is currently passed through as a string.
122 assert isinstance(typename, str) 122 assert isinstance(typename, str)
123 # The value is either a literal (currently passed through as a string) or a 123 # The value is either a literal (currently passed through as a string) or a
124 # "wrapped identifier". 124 # "wrapped identifier".
125 assert isinstance(value, str) or isinstance(value, tuple) 125 assert isinstance(value, str) or isinstance(value, tuple)
126 super(Const, self).__init__(name, **kwargs) 126 super(Const, self).__init__(mojom_name, **kwargs)
127 self.typename = typename 127 self.typename = typename
128 self.value = value 128 self.value = value
129 129
130 def __eq__(self, other): 130 def __eq__(self, other):
131 return super(Const, self).__eq__(other) and \ 131 return super(Const, self).__eq__(other) and \
132 self.typename == other.typename and \ 132 self.typename == other.typename and \
133 self.value == other.value 133 self.value == other.value
134 134
135 135
136 class Enum(Definition): 136 class Enum(Definition):
137 """Represents an enum definition.""" 137 """Represents an enum definition."""
138 138
139 def __init__(self, name, attribute_list, enum_value_list, **kwargs): 139 def __init__(self, mojom_name, attribute_list, enum_value_list, **kwargs):
140 assert attribute_list is None or isinstance(attribute_list, AttributeList) 140 assert attribute_list is None or isinstance(attribute_list, AttributeList)
141 assert enum_value_list is None or isinstance(enum_value_list, EnumValueList) 141 assert enum_value_list is None or isinstance(enum_value_list, EnumValueList)
142 super(Enum, self).__init__(name, **kwargs) 142 super(Enum, self).__init__(mojom_name, **kwargs)
143 self.attribute_list = attribute_list 143 self.attribute_list = attribute_list
144 self.enum_value_list = enum_value_list 144 self.enum_value_list = enum_value_list
145 145
146 def __eq__(self, other): 146 def __eq__(self, other):
147 return super(Enum, self).__eq__(other) and \ 147 return super(Enum, self).__eq__(other) and \
148 self.attribute_list == other.attribute_list and \ 148 self.attribute_list == other.attribute_list and \
149 self.enum_value_list == other.enum_value_list 149 self.enum_value_list == other.enum_value_list
150 150
151 151
152 class EnumValue(Definition): 152 class EnumValue(Definition):
153 """Represents a definition of an enum value.""" 153 """Represents a definition of an enum value."""
154 154
155 def __init__(self, name, attribute_list, value, **kwargs): 155 def __init__(self, mojom_name, attribute_list, value, **kwargs):
156 # The optional value is either an int (which is current a string) or a 156 # The optional value is either an int (which is current a string) or a
157 # "wrapped identifier". 157 # "wrapped identifier".
158 assert attribute_list is None or isinstance(attribute_list, AttributeList) 158 assert attribute_list is None or isinstance(attribute_list, AttributeList)
159 assert value is None or isinstance(value, (str, tuple)) 159 assert value is None or isinstance(value, (str, tuple))
160 super(EnumValue, self).__init__(name, **kwargs) 160 super(EnumValue, self).__init__(mojom_name, **kwargs)
161 self.attribute_list = attribute_list 161 self.attribute_list = attribute_list
162 self.value = value 162 self.value = value
163 163
164 def __eq__(self, other): 164 def __eq__(self, other):
165 return super(EnumValue, self).__eq__(other) and \ 165 return super(EnumValue, self).__eq__(other) and \
166 self.attribute_list == other.attribute_list and \ 166 self.attribute_list == other.attribute_list and \
167 self.value == other.value 167 self.value == other.value
168 168
169 169
170 class EnumValueList(NodeListBase): 170 class EnumValueList(NodeListBase):
(...skipping 18 matching lines...) Expand all
189 189
190 class ImportList(NodeListBase): 190 class ImportList(NodeListBase):
191 """Represents a list (i.e., sequence) of import statements.""" 191 """Represents a list (i.e., sequence) of import statements."""
192 192
193 _list_item_type = Import 193 _list_item_type = Import
194 194
195 195
196 class Interface(Definition): 196 class Interface(Definition):
197 """Represents an interface definition.""" 197 """Represents an interface definition."""
198 198
199 def __init__(self, name, attribute_list, body, **kwargs): 199 def __init__(self, mojom_name, attribute_list, body, **kwargs):
200 assert attribute_list is None or isinstance(attribute_list, AttributeList) 200 assert attribute_list is None or isinstance(attribute_list, AttributeList)
201 assert isinstance(body, InterfaceBody) 201 assert isinstance(body, InterfaceBody)
202 super(Interface, self).__init__(name, **kwargs) 202 super(Interface, self).__init__(mojom_name, **kwargs)
203 self.attribute_list = attribute_list 203 self.attribute_list = attribute_list
204 self.body = body 204 self.body = body
205 205
206 def __eq__(self, other): 206 def __eq__(self, other):
207 return super(Interface, self).__eq__(other) and \ 207 return super(Interface, self).__eq__(other) and \
208 self.attribute_list == other.attribute_list and \ 208 self.attribute_list == other.attribute_list and \
209 self.body == other.body 209 self.body == other.body
210 210
211 211
212 class Method(Definition): 212 class Method(Definition):
213 """Represents a method definition.""" 213 """Represents a method definition."""
214 214
215 def __init__(self, name, attribute_list, ordinal, parameter_list, 215 def __init__(self, mojom_name, attribute_list, ordinal, parameter_list,
216 response_parameter_list, **kwargs): 216 response_parameter_list, **kwargs):
217 assert attribute_list is None or isinstance(attribute_list, AttributeList) 217 assert attribute_list is None or isinstance(attribute_list, AttributeList)
218 assert ordinal is None or isinstance(ordinal, Ordinal) 218 assert ordinal is None or isinstance(ordinal, Ordinal)
219 assert isinstance(parameter_list, ParameterList) 219 assert isinstance(parameter_list, ParameterList)
220 assert response_parameter_list is None or \ 220 assert response_parameter_list is None or \
221 isinstance(response_parameter_list, ParameterList) 221 isinstance(response_parameter_list, ParameterList)
222 super(Method, self).__init__(name, **kwargs) 222 super(Method, self).__init__(mojom_name, **kwargs)
223 self.attribute_list = attribute_list 223 self.attribute_list = attribute_list
224 self.ordinal = ordinal 224 self.ordinal = ordinal
225 self.parameter_list = parameter_list 225 self.parameter_list = parameter_list
226 self.response_parameter_list = response_parameter_list 226 self.response_parameter_list = response_parameter_list
227 227
228 def __eq__(self, other): 228 def __eq__(self, other):
229 return super(Method, self).__eq__(other) and \ 229 return super(Method, self).__eq__(other) and \
230 self.attribute_list == other.attribute_list and \ 230 self.attribute_list == other.attribute_list and \
231 self.ordinal == other.ordinal and \ 231 self.ordinal == other.ordinal and \
232 self.parameter_list == other.parameter_list and \ 232 self.parameter_list == other.parameter_list and \
233 self.response_parameter_list == other.response_parameter_list 233 self.response_parameter_list == other.response_parameter_list
234 234
235 235
236 # This needs to be declared after |Method|. 236 # This needs to be declared after |Method|.
237 class InterfaceBody(NodeListBase): 237 class InterfaceBody(NodeListBase):
238 """Represents the body of (i.e., list of definitions inside) an interface.""" 238 """Represents the body of (i.e., list of definitions inside) an interface."""
239 239
240 _list_item_type = (Const, Enum, Method) 240 _list_item_type = (Const, Enum, Method)
241 241
242 242
243 class Module(NodeBase): 243 class Module(NodeBase):
244 """Represents a module statement.""" 244 """Represents a module statement."""
245 245
246 def __init__(self, name, attribute_list, **kwargs): 246 def __init__(self, mojom_namespace, attribute_list, **kwargs):
247 # |name| is either none or a "wrapped identifier". 247 # |mojom_namespace| is either none or a "wrapped identifier".
248 assert name is None or isinstance(name, tuple) 248 assert mojom_namespace is None or isinstance(mojom_namespace, tuple)
249 assert attribute_list is None or isinstance(attribute_list, AttributeList) 249 assert attribute_list is None or isinstance(attribute_list, AttributeList)
250 super(Module, self).__init__(**kwargs) 250 super(Module, self).__init__(**kwargs)
251 self.name = name 251 self.mojom_namespace = mojom_namespace
252 self.attribute_list = attribute_list 252 self.attribute_list = attribute_list
253 253
254 def __eq__(self, other): 254 def __eq__(self, other):
255 return super(Module, self).__eq__(other) and \ 255 return super(Module, self).__eq__(other) and \
256 self.name == other.name and \ 256 self.mojom_namespace == other.mojom_namespace and \
257 self.attribute_list == other.attribute_list 257 self.attribute_list == other.attribute_list
258 258
259 259
260 class Mojom(NodeBase): 260 class Mojom(NodeBase):
261 """Represents an entire .mojom file. (This is the root node.)""" 261 """Represents an entire .mojom file. (This is the root node.)"""
262 262
263 def __init__(self, module, import_list, definition_list, **kwargs): 263 def __init__(self, module, import_list, definition_list, **kwargs):
264 assert module is None or isinstance(module, Module) 264 assert module is None or isinstance(module, Module)
265 assert isinstance(import_list, ImportList) 265 assert isinstance(import_list, ImportList)
266 assert isinstance(definition_list, list) 266 assert isinstance(definition_list, list)
(...skipping 22 matching lines...) Expand all
289 self.value = value 289 self.value = value
290 290
291 def __eq__(self, other): 291 def __eq__(self, other):
292 return super(Ordinal, self).__eq__(other) and \ 292 return super(Ordinal, self).__eq__(other) and \
293 self.value == other.value 293 self.value == other.value
294 294
295 295
296 class Parameter(NodeBase): 296 class Parameter(NodeBase):
297 """Represents a method request or response parameter.""" 297 """Represents a method request or response parameter."""
298 298
299 def __init__(self, name, attribute_list, ordinal, typename, **kwargs): 299 def __init__(self, mojom_name, attribute_list, ordinal, typename, **kwargs):
300 assert isinstance(name, str) 300 assert isinstance(mojom_name, str)
301 assert attribute_list is None or isinstance(attribute_list, AttributeList) 301 assert attribute_list is None or isinstance(attribute_list, AttributeList)
302 assert ordinal is None or isinstance(ordinal, Ordinal) 302 assert ordinal is None or isinstance(ordinal, Ordinal)
303 assert isinstance(typename, str) 303 assert isinstance(typename, str)
304 super(Parameter, self).__init__(**kwargs) 304 super(Parameter, self).__init__(**kwargs)
305 self.name = name 305 self.mojom_name = mojom_name
306 self.attribute_list = attribute_list 306 self.attribute_list = attribute_list
307 self.ordinal = ordinal 307 self.ordinal = ordinal
308 self.typename = typename 308 self.typename = typename
309 309
310 def __eq__(self, other): 310 def __eq__(self, other):
311 return super(Parameter, self).__eq__(other) and \ 311 return super(Parameter, self).__eq__(other) and \
312 self.name == other.name and \ 312 self.mojom_name == other.mojom_name and \
313 self.attribute_list == other.attribute_list and \ 313 self.attribute_list == other.attribute_list and \
314 self.ordinal == other.ordinal and \ 314 self.ordinal == other.ordinal and \
315 self.typename == other.typename 315 self.typename == other.typename
316 316
317 317
318 class ParameterList(NodeListBase): 318 class ParameterList(NodeListBase):
319 """Represents a list of (method request or response) parameters.""" 319 """Represents a list of (method request or response) parameters."""
320 320
321 _list_item_type = Parameter 321 _list_item_type = Parameter
322 322
323 323
324 class Struct(Definition): 324 class Struct(Definition):
325 """Represents a struct definition.""" 325 """Represents a struct definition."""
326 326
327 def __init__(self, name, attribute_list, body, **kwargs): 327 def __init__(self, mojom_name, attribute_list, body, **kwargs):
328 assert attribute_list is None or isinstance(attribute_list, AttributeList) 328 assert attribute_list is None or isinstance(attribute_list, AttributeList)
329 assert isinstance(body, StructBody) or body is None 329 assert isinstance(body, StructBody) or body is None
330 super(Struct, self).__init__(name, **kwargs) 330 super(Struct, self).__init__(mojom_name, **kwargs)
331 self.attribute_list = attribute_list 331 self.attribute_list = attribute_list
332 self.body = body 332 self.body = body
333 333
334 def __eq__(self, other): 334 def __eq__(self, other):
335 return super(Struct, self).__eq__(other) and \ 335 return super(Struct, self).__eq__(other) and \
336 self.attribute_list == other.attribute_list and \ 336 self.attribute_list == other.attribute_list and \
337 self.body == other.body 337 self.body == other.body
338 338
339 339
340 class StructField(Definition): 340 class StructField(Definition):
341 """Represents a struct field definition.""" 341 """Represents a struct field definition."""
342 342
343 def __init__(self, name, attribute_list, ordinal, typename, default_value, 343 def __init__(self, mojom_name, attribute_list, ordinal, typename,
344 **kwargs): 344 default_value, **kwargs):
345 assert isinstance(name, str) 345 assert isinstance(mojom_name, str)
346 assert attribute_list is None or isinstance(attribute_list, AttributeList) 346 assert attribute_list is None or isinstance(attribute_list, AttributeList)
347 assert ordinal is None or isinstance(ordinal, Ordinal) 347 assert ordinal is None or isinstance(ordinal, Ordinal)
348 assert isinstance(typename, str) 348 assert isinstance(typename, str)
349 # The optional default value is currently either a value as a string or a 349 # The optional default value is currently either a value as a string or a
350 # "wrapped identifier". 350 # "wrapped identifier".
351 assert default_value is None or isinstance(default_value, (str, tuple)) 351 assert default_value is None or isinstance(default_value, (str, tuple))
352 super(StructField, self).__init__(name, **kwargs) 352 super(StructField, self).__init__(mojom_name, **kwargs)
353 self.attribute_list = attribute_list 353 self.attribute_list = attribute_list
354 self.ordinal = ordinal 354 self.ordinal = ordinal
355 self.typename = typename 355 self.typename = typename
356 self.default_value = default_value 356 self.default_value = default_value
357 357
358 def __eq__(self, other): 358 def __eq__(self, other):
359 return super(StructField, self).__eq__(other) and \ 359 return super(StructField, self).__eq__(other) and \
360 self.attribute_list == other.attribute_list and \ 360 self.attribute_list == other.attribute_list and \
361 self.ordinal == other.ordinal and \ 361 self.ordinal == other.ordinal and \
362 self.typename == other.typename and \ 362 self.typename == other.typename and \
363 self.default_value == other.default_value 363 self.default_value == other.default_value
364 364
365 365
366 # This needs to be declared after |StructField|. 366 # This needs to be declared after |StructField|.
367 class StructBody(NodeListBase): 367 class StructBody(NodeListBase):
368 """Represents the body of (i.e., list of definitions inside) a struct.""" 368 """Represents the body of (i.e., list of definitions inside) a struct."""
369 369
370 _list_item_type = (Const, Enum, StructField) 370 _list_item_type = (Const, Enum, StructField)
371 371
372 372
373 class Union(Definition): 373 class Union(Definition):
374 """Represents a union definition.""" 374 """Represents a union definition."""
375 375
376 def __init__(self, name, attribute_list, body, **kwargs): 376 def __init__(self, mojom_name, attribute_list, body, **kwargs):
377 assert attribute_list is None or isinstance(attribute_list, AttributeList) 377 assert attribute_list is None or isinstance(attribute_list, AttributeList)
378 assert isinstance(body, UnionBody) 378 assert isinstance(body, UnionBody)
379 super(Union, self).__init__(name, **kwargs) 379 super(Union, self).__init__(mojom_name, **kwargs)
380 self.attribute_list = attribute_list 380 self.attribute_list = attribute_list
381 self.body = body 381 self.body = body
382 382
383 def __eq__(self, other): 383 def __eq__(self, other):
384 return super(Union, self).__eq__(other) and \ 384 return super(Union, self).__eq__(other) and \
385 self.attribute_list == other.attribute_list and \ 385 self.attribute_list == other.attribute_list and \
386 self.body == other.body 386 self.body == other.body
387 387
388 388
389 class UnionField(Definition): 389 class UnionField(Definition):
390 390
391 def __init__(self, name, attribute_list, ordinal, typename, **kwargs): 391 def __init__(self, mojom_name, attribute_list, ordinal, typename, **kwargs):
392 assert isinstance(name, str) 392 assert isinstance(mojom_name, str)
393 assert attribute_list is None or isinstance(attribute_list, AttributeList) 393 assert attribute_list is None or isinstance(attribute_list, AttributeList)
394 assert ordinal is None or isinstance(ordinal, Ordinal) 394 assert ordinal is None or isinstance(ordinal, Ordinal)
395 assert isinstance(typename, str) 395 assert isinstance(typename, str)
396 super(UnionField, self).__init__(name, **kwargs) 396 super(UnionField, self).__init__(mojom_name, **kwargs)
397 self.attribute_list = attribute_list 397 self.attribute_list = attribute_list
398 self.ordinal = ordinal 398 self.ordinal = ordinal
399 self.typename = typename 399 self.typename = typename
400 400
401 def __eq__(self, other): 401 def __eq__(self, other):
402 return super(UnionField, self).__eq__(other) and \ 402 return super(UnionField, self).__eq__(other) and \
403 self.attribute_list == other.attribute_list and \ 403 self.attribute_list == other.attribute_list and \
404 self.ordinal == other.ordinal and \ 404 self.ordinal == other.ordinal and \
405 self.typename == other.typename 405 self.typename == other.typename
406 406
407 407
408 class UnionBody(NodeListBase): 408 class UnionBody(NodeListBase):
409 409
410 _list_item_type = UnionField 410 _list_item_type = UnionField
OLDNEW
« no previous file with comments | « mojo/public/tools/bindings/pylib/mojom/generate/translate.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698