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

Unified Diff: tools/json_schema_compiler/idl_schema.py

Issue 10082038: Hack together a quick doc generator for IDL files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: separate alarms change Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/docs/samples.json ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/json_schema_compiler/idl_schema.py
diff --git a/tools/json_schema_compiler/idl_schema.py b/tools/json_schema_compiler/idl_schema.py
old mode 100755
new mode 100644
index 8d735e800bbbefdb803cf5e37c39f991f914691a..3a7e6e46ab39c0c6e421f6bf8b4d8e99cc64e73c
--- a/tools/json_schema_compiler/idl_schema.py
+++ b/tools/json_schema_compiler/idl_schema.py
@@ -6,6 +6,7 @@
import json
import os.path
import sys
+import re
# This file is a peer to json_schema.py. Each of these files understands a
# certain format describing APIs (either JSON or IDL), reads files written
@@ -22,18 +23,45 @@ if idl_generators_path not in sys.path:
sys.path.insert(0, idl_generators_path)
import idl_parser
+def ProcessComment(comment):
+ '''
+ Given the string from a Comment node, parse it into a tuple that looks
+ like:
+ (
+ "The processed comment, minus all |parameter| mentions.",
+ {
+ 'parameter_name_1': "The comment that followed |parameter_name_1|:",
+ ...
+ }
+ )
+ '''
+ # Find all the parameter comments of the form "|name|: comment".
+ parameter_comments = re.findall(r'\n *\|([^|]*)\| *: *(.*)', comment)
+ # Get the parent comment (everything before the first parameter comment.
+ parent_comment = re.sub(r'\n *\|.*', '', comment)
+ parent_comment = parent_comment.replace('\n', '').strip()
+
+ parsed = {}
+ for (name, comment) in parameter_comments:
+ parsed[name] = comment.replace('\n', '').strip()
+ return (parent_comment, parsed)
+
class Callspec(object):
'''
Given a Callspec node representing an IDL function declaration, converts into
a name/value pair where the value is a list of function parameters.
'''
- def __init__(self, callspec_node):
+ def __init__(self, callspec_node, comment):
self.node = callspec_node
+ self.comment = comment
def process(self, callbacks):
parameters = []
for node in self.node.children:
- parameters.append(Param(node).process(callbacks))
+ parameter = Param(node).process(callbacks)
+ if parameter['name'] in self.comment:
+ parameter['description'] = self.comment[parameter['name']]
+ parameters.append(parameter)
return self.node.GetName(), parameters
class Param(object):
@@ -84,10 +112,15 @@ class Member(object):
if self.node.GetProperty('nodoc'):
properties['nodoc'] = True
is_function = False
+ parameter_comments = {}
+ for node in self.node.children:
+ if node.cls == 'Comment':
+ (parent_comment, parameter_comments) = ProcessComment(node.GetName())
+ properties['description'] = parent_comment
for node in self.node.children:
if node.cls == 'Callspec':
is_function = True
- name, parameters = Callspec(node).process(callbacks)
+ name, parameters = Callspec(node, parameter_comments).process(callbacks)
properties['parameters'] = parameters
properties['name'] = name
if is_function:
« no previous file with comments | « chrome/common/extensions/docs/samples.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698