| 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 e1dfcf2869dfa78b4fbb089ddfc0f7514a1d36a4..8ba27ca18e6aac43b755e8b6fcbafdaa43a070de 100644
|
| --- a/tools/json_schema_compiler/js_externs_generator.py
|
| +++ b/tools/json_schema_compiler/js_externs_generator.py
|
| @@ -39,16 +39,16 @@ class _Generator(object):
|
| (c.Append(self._GetHeader(sys.argv[0], self._namespace.name))
|
| .Append())
|
|
|
| - c.Cblock(self._GenerateNamespaceObject())
|
| + self._AppendNamespaceObject(c)
|
|
|
| for js_type in self._namespace.types.values():
|
| - c.Cblock(self._GenerateType(js_type))
|
| + self._AppendType(c, js_type)
|
|
|
| for function in self._namespace.functions.values():
|
| - c.Cblock(self._GenerateFunction(function))
|
| + self._AppendFunction(c, function)
|
|
|
| for event in self._namespace.events.values():
|
| - c.Cblock(self._GenerateEvent(event))
|
| + self._AppendEvent(c, event)
|
|
|
| c.TrimTrailingNewlines()
|
|
|
| @@ -62,26 +62,22 @@ class _Generator(object):
|
| ('/** @fileoverview Externs generated from namespace: %s */' %
|
| namespace))
|
|
|
| -
|
| - def _GenerateType(self, js_type):
|
| - """Given a Type object, returns the Code for this type's definition.
|
| + def _AppendType(self, c, js_type):
|
| + """Given a Type object, generates the Code for this type's definition.
|
| """
|
| - c = Code()
|
| if js_type.property_type is PropertyType.ENUM:
|
| - c.Concat(self._GenerateEnumJsDoc(js_type))
|
| + self._AppendEnumJsDoc(c, js_type)
|
| else:
|
| - c.Concat(self._GenerateTypeJsDoc(js_type))
|
| + self._AppendTypeJsDoc(c, js_type)
|
| + c.Append()
|
|
|
| - return c
|
| -
|
| - def _GenerateEnumJsDoc(self, js_type):
|
| - """ Given an Enum Type object, returns the Code for the enum's definition.
|
| + def _AppendEnumJsDoc(self, c, js_type):
|
| + """ Given an Enum Type object, generates the Code for the enum's definition.
|
| """
|
| - c = Code()
|
| (c.Sblock(line='/**', line_prefix=' * ')
|
| .Append('@enum {string}')
|
| - .Append(self._js_util.GenerateSeeLink(self._namespace.name, 'type',
|
| - js_type.simple_name))
|
| + .Append(self._js_util.GetSeeLink(self._namespace.name, 'type',
|
| + js_type.simple_name))
|
| .Eblock(' */'))
|
| c.Append('chrome.%s.%s = {' % (self._namespace.name, js_type.name))
|
|
|
| @@ -101,7 +97,6 @@ class _Generator(object):
|
| [" %s: '%s'," % (get_property_name(v.name), v.name)
|
| for v in js_type.enum_values]))
|
| c.Append('};')
|
| - return c
|
|
|
| def _IsTypeConstructor(self, js_type):
|
| """Returns true if the given type should be a @constructor. If this returns
|
| @@ -110,12 +105,9 @@ class _Generator(object):
|
| return any(prop.type_.property_type is PropertyType.FUNCTION
|
| for prop in js_type.properties.values())
|
|
|
| - def _GenerateTypeJsDoc(self, js_type):
|
| - """Generates the documentation for a type as a Code.
|
| -
|
| - Returns an empty code object if the object has no documentation.
|
| + def _AppendTypeJsDoc(self, c, js_type):
|
| + """Appends the documentation for a type as a Code.
|
| """
|
| - c = Code()
|
| c.Sblock(line='/**', line_prefix=' * ')
|
|
|
| if js_type.description:
|
| @@ -126,10 +118,10 @@ class _Generator(object):
|
| if is_constructor:
|
| c.Comment('@constructor', comment_prefix = ' * ', wrap_indent=4)
|
| else:
|
| - c.Concat(self._GenerateTypedef(js_type.properties))
|
| + self._AppendTypedef(c, js_type.properties)
|
|
|
| - c.Append(self._js_util.GenerateSeeLink(self._namespace.name, 'type',
|
| - js_type.simple_name))
|
| + c.Append(self._js_util.GetSeeLink(self._namespace.name, 'type',
|
| + js_type.simple_name))
|
| c.Eblock(' */')
|
|
|
| var = 'chrome.%s.%s' % (js_type.namespace.name, js_type.simple_name)
|
| @@ -137,23 +129,18 @@ class _Generator(object):
|
| var += ';'
|
| c.Append(var)
|
|
|
| - return c
|
| -
|
| - def _GenerateTypedef(self, properties):
|
| - """Given an OrderedDict of properties, returns a Code containing a @typedef.
|
| + def _AppendTypedef(self, c, properties):
|
| + """Given an OrderedDict of properties, Appends code containing a @typedef.
|
| """
|
| - if not properties: return Code()
|
| + if not properties: return
|
|
|
| - c = Code()
|
| c.Append('@typedef {')
|
| - c.Concat(self._js_util.GenerateObjectDefinition(self._namespace.name,
|
| - properties),
|
| - new_line=False)
|
| + self._js_util.AppendObjectDefinition(c, self._namespace.name, properties,
|
| + new_line=False)
|
| c.Append('}', new_line=False)
|
| - return c
|
|
|
| - def _GenerateFunction(self, function):
|
| - """Generates the code representing a function, including its documentation.
|
| + def _AppendFunction(self, c, function):
|
| + """Appends the code representing a function, including its documentation.
|
| For example:
|
|
|
| /**
|
| @@ -161,36 +148,31 @@ class _Generator(object):
|
| */
|
| chrome.window.setTitle = function(title) {};
|
| """
|
| - c = Code()
|
| - params = self._GenerateFunctionParams(function)
|
| - (c.Concat(self._js_util.GenerateFunctionJsDoc(self._namespace.name,
|
| - function))
|
| - .Append('chrome.%s.%s = function(%s) {};' % (self._namespace.name,
|
| - function.name,
|
| - params))
|
| - )
|
| - return c
|
| -
|
| - def _GenerateEvent(self, event):
|
| - """Generates the code representing an event.
|
| + self._js_util.AppendFunctionJsDoc(c, self._namespace.name, function)
|
| + params = self._GetFunctionParams(function)
|
| + c.Append('chrome.%s.%s = function(%s) {};' % (self._namespace.name,
|
| + function.name, params))
|
| + c.Append()
|
| +
|
| + def _AppendEvent(self, c, event):
|
| + """Appends the code representing an event.
|
| For example:
|
|
|
| /** @type {!ChromeEvent} */
|
| chrome.bookmarks.onChildrenReordered;
|
| """
|
| - c = Code()
|
| c.Sblock(line='/**', line_prefix=' * ')
|
| if (event.description):
|
| c.Comment(event.description, comment_prefix='')
|
| c.Append('@type {!ChromeEvent}')
|
| - c.Append(self._js_util.GenerateSeeLink(self._namespace.name, 'event',
|
| - event.name))
|
| + c.Append(self._js_util.GetSeeLink(self._namespace.name, 'event',
|
| + event.name))
|
| c.Eblock(' */')
|
| c.Append('chrome.%s.%s;' % (self._namespace.name, event.name))
|
| - return c
|
| + c.Append()
|
|
|
| - def _GenerateNamespaceObject(self):
|
| - """Generates the code creating namespace object.
|
| + def _AppendNamespaceObject(self, c):
|
| + """Appends the code creating namespace object.
|
| For example:
|
|
|
| /**
|
| @@ -198,14 +180,15 @@ class _Generator(object):
|
| */
|
| chrome.bookmarks = {};
|
| """
|
| - c = Code()
|
| - (c.Append("""/**
|
| + c.Append("""/**
|
| * @const
|
| */""")
|
| - .Append('chrome.%s = {};' % self._namespace.name))
|
| - return c
|
| + c.Append('chrome.%s = {};' % self._namespace.name)
|
| + c.Append()
|
|
|
| - def _GenerateFunctionParams(self, function):
|
| + def _GetFunctionParams(self, function):
|
| + """Returns the function params string for function.
|
| + """
|
| params = function.params[:]
|
| if function.callback:
|
| params.append(function.callback)
|
|
|