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

Side by Side Diff: tools/json_schema_compiler/js_externs_generator.py

Issue 1109793003: [Extern Generation] Normify extern enum property names (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 | « no previous file | tools/json_schema_compiler/js_externs_generator_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 Generator that produces an externs file for the Closure Compiler. 5 Generator that produces an externs file for the Closure Compiler.
6 Note: This is a work in progress, and generated externs may require tweaking. 6 Note: This is a work in progress, and generated externs may require tweaking.
7 7
8 See https://developers.google.com/closure/compiler/docs/api-tutorial3#externs 8 See https://developers.google.com/closure/compiler/docs/api-tutorial3#externs
9 """ 9 """
10 10
11 from code import Code 11 from code import Code
12 from model import * 12 from model import *
13 from schema_util import * 13 from schema_util import *
14 14
15 import os 15 import os
16 from datetime import datetime 16 from datetime import datetime
17 import re
17 18
18 LICENSE = ("""// Copyright %s The Chromium Authors. All rights reserved. 19 LICENSE = ("""// Copyright %s The Chromium Authors. All rights reserved.
19 // Use of this source code is governed by a BSD-style license that can be 20 // Use of this source code is governed by a BSD-style license that can be
20 // found in the LICENSE file. 21 // found in the LICENSE file.
21 """ % datetime.now().year) 22 """ % datetime.now().year)
22 23
23 class JsExternsGenerator(object): 24 class JsExternsGenerator(object):
24 def Generate(self, namespace): 25 def Generate(self, namespace):
25 return _Generator(namespace).Generate() 26 return _Generator(namespace).Generate()
26 27
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 65
65 def _GenerateEnumJsDoc(self, js_type): 66 def _GenerateEnumJsDoc(self, js_type):
66 """ Given an Enum Type object, returns the Code for the enum's definition. 67 """ Given an Enum Type object, returns the Code for the enum's definition.
67 """ 68 """
68 c = Code() 69 c = Code()
69 (c.Sblock(line='/**', line_prefix=' * ') 70 (c.Sblock(line='/**', line_prefix=' * ')
70 .Append('@enum {string}') 71 .Append('@enum {string}')
71 .Append(self._GenerateSeeLink('type', js_type.simple_name)) 72 .Append(self._GenerateSeeLink('type', js_type.simple_name))
72 .Eblock(' */')) 73 .Eblock(' */'))
73 c.Append('chrome.%s.%s = {' % (self._namespace.name, js_type.name)) 74 c.Append('chrome.%s.%s = {' % (self._namespace.name, js_type.name))
75
76 def get_property_name(e):
Dan Beam 2015/04/28 00:21:46 nit: def scare_small_children(e): https://google-s
Devlin 2015/04/28 00:25:08 Haha I don't think I've ever seen that (phrasing,
77 # Enum properties are normified to be in ALL_CAPS_STYLE.
78 # Assume enum '1ring-rulesThemAll'.
79 # Transform to '1ring-rules_Them_All'.
80 e = re.sub(r'([a-z])([A-Z])', r'\1_\2', e)
81 # Transform to '1ring_rules_Them_All'.
82 e = re.sub(r'\W', '_', e)
83 # Transform to '_1ring_rules_Them_All'.
84 e = re.sub(r'^(\d)', r'_\1', e)
85 # Transform to '_1RING_RULES_THEM_ALL'.
86 return e.upper()
87
74 c.Append('\n'.join( 88 c.Append('\n'.join(
75 [" %s: '%s'," % (v.name, v.name) for v in js_type.enum_values])) 89 [" %s: '%s'," % (get_property_name(v.name), v.name)
90 for v in js_type.enum_values]))
76 c.Append('};') 91 c.Append('};')
77 return c 92 return c
78 93
79 def _IsTypeConstructor(self, js_type): 94 def _IsTypeConstructor(self, js_type):
80 """Returns true if the given type should be a @constructor. If this returns 95 """Returns true if the given type should be a @constructor. If this returns
81 false, the type is a typedef. 96 false, the type is a typedef.
82 """ 97 """
83 return any(prop.type_.property_type is PropertyType.FUNCTION 98 return any(prop.type_.property_type is PropertyType.FUNCTION
84 for prop in js_type.properties.values()) 99 for prop in js_type.properties.values())
85 100
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 """Generates a @see link for a given API 'object' (type, method, or event). 322 """Generates a @see link for a given API 'object' (type, method, or event).
308 """ 323 """
309 324
310 # NOTE(devlin): This is kind of a hack. Some APIs will be hosted on 325 # NOTE(devlin): This is kind of a hack. Some APIs will be hosted on
311 # developer.chrome.com/apps/ instead of /extensions/, and some APIs have 326 # developer.chrome.com/apps/ instead of /extensions/, and some APIs have
312 # '.'s in them (like app.window), which should resolve to 'app_window'. 327 # '.'s in them (like app.window), which should resolve to 'app_window'.
313 # Luckily, the doc server has excellent url resolution, and knows exactly 328 # Luckily, the doc server has excellent url resolution, and knows exactly
314 # what we mean. This saves us from needing any complicated logic here. 329 # what we mean. This saves us from needing any complicated logic here.
315 return ('@see https://developer.chrome.com/extensions/%s#%s-%s' % 330 return ('@see https://developer.chrome.com/extensions/%s#%s-%s' %
316 (self._namespace.name, object_type, object_name)) 331 (self._namespace.name, object_type, object_name))
OLDNEW
« no previous file with comments | « no previous file | tools/json_schema_compiler/js_externs_generator_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698