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

Unified Diff: tools/json_schema_compiler/js_externs_generator.py

Issue 1015033003: [Extension API Extern Generation] Auto-generate enums (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/json_schema_compiler/idl_schema.py ('k') | tools/json_schema_compiler/js_externs_generator_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/json_schema_compiler/js_externs_generator.py
diff --git a/tools/json_schema_compiler/js_externs_generator.py b/tools/json_schema_compiler/js_externs_generator.py
index 52a1d255d32c60f99e85c17ec9fcb44a904e1b57..e0a09ff7f270bb4b836f248e33bb605bb91b95bb 100644
--- a/tools/json_schema_compiler/js_externs_generator.py
+++ b/tools/json_schema_compiler/js_externs_generator.py
@@ -38,11 +38,11 @@ class _Generator(object):
self._namespace.name)
.Append())
+ c.Cblock(self._GenerateNamespaceObject())
+
for js_type in self._namespace.types.values():
c.Cblock(self._GenerateType(js_type))
- c.Cblock(self._GenerateNamespaceObject())
-
for function in self._namespace.functions.values():
c.Cblock(self._GenerateFunction(function))
@@ -53,22 +53,24 @@ class _Generator(object):
def _GenerateType(self, js_type):
"""Given a Type object, returns the Code for this type's definition.
-
"""
c = Code()
-
- # Since enums are just treated as strings for now, don't generate their
- # type.
if js_type.property_type is PropertyType.ENUM:
- return c
-
- c.Concat(self._GenerateTypeJsDoc(js_type))
+ c.Concat(self._GenerateEnumJsDoc(js_type))
+ else:
+ c.Concat(self._GenerateTypeJsDoc(js_type))
- var = 'var ' + js_type.simple_name
- if self._IsTypeConstructor(js_type): var += ' = function()'
- var += ';'
- c.Append(var)
+ return c
+ def _GenerateEnumJsDoc(self, js_type):
+ """ Given an Enum Type object, returns the Code for the enum's definition.
+ """
+ c = Code()
+ c.Append('/**').Append(' * @enum {string}').Append(' */')
+ c.Append('chrome.%s.%s = {' % (self._namespace.name, js_type.name))
+ c.Append('\n'.join(
+ [" %s: '%s'," % (v.name, v.name) for v in js_type.enum_values]))
+ c.Append('};')
return c
def _IsTypeConstructor(self, js_type):
@@ -90,12 +92,19 @@ class _Generator(object):
for line in js_type.description.splitlines():
c.Comment(line, comment_prefix = ' * ')
- if self._IsTypeConstructor(js_type):
+ is_constructor = self._IsTypeConstructor(js_type)
+ if is_constructor:
c.Comment('@constructor', comment_prefix = ' * ')
else:
c.Concat(self._GenerateTypedef(js_type.properties))
c.Append(' */')
+
+ var = 'var ' + js_type.simple_name
+ if is_constructor: var += ' = function() {}'
+ var += ';'
+ c.Append(var)
+
return c
def _GenerateTypedef(self, properties):
@@ -173,7 +182,12 @@ class _Generator(object):
elif js_type.property_type is PropertyType.ARRAY:
return 'Array'
elif js_type.property_type is PropertyType.REF:
- return js_type.ref_type
+ ref_type = js_type.ref_type
+ # Enums are defined as chrome.fooAPI.MyEnum, but types are defined simply
+ # as MyType.
+ if self._namespace.types[ref_type].property_type is PropertyType.ENUM:
+ ref_type = 'chrome.%s.%s' % (self._namespace.name, ref_type)
+ return ref_type
elif js_type.property_type.is_fundamental:
return js_type.property_type.name
else:
« no previous file with comments | « tools/json_schema_compiler/idl_schema.py ('k') | tools/json_schema_compiler/js_externs_generator_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698