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

Unified Diff: third_party/WebKit/Source/bindings/scripts/print_idl_diff.py

Issue 2169673003: Move bindings tooling scripts to Tools/Scripts/webkitpy/bindings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@change-test
Patch Set: Move test Created 4 years, 5 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
Index: third_party/WebKit/Source/bindings/scripts/print_idl_diff.py
diff --git a/third_party/WebKit/Source/bindings/scripts/print_idl_diff.py b/third_party/WebKit/Source/bindings/scripts/print_idl_diff.py
deleted file mode 100755
index 9a8deea5afa18c9330003a2ac6e97fce94a8019a..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/bindings/scripts/print_idl_diff.py
+++ /dev/null
@@ -1,433 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Print a diff generated by generate_idl_diff.py.
-Before printing, sort the diff in the alphabetical order or the order of
-diffing tags.
-Usage: print_idl_diff.py diff_file.json order
- diff.json:
- Output of generate_idl_diff.py. The json file contains a dictionary
- that represents a diff between two different Chromium versions. The
- structure of the dictionary is like below.
- order:
- Specify how to sort. Either by "ALPHABET" or "TAG".
-"""
-
-from collections import OrderedDict
-import json
-import sys
-
-from generate_idl_diff import load_json_file
-from generate_idl_diff import EXTATTRIBUTES_AND_MEMBER_TYPES
-from generate_idl_diff import DIFF_TAG
-from generate_idl_diff import DIFF_TAG_ADDED
-from generate_idl_diff import DIFF_TAG_DELETED
-
-
-"""Refer to the explanation of generate_idl_diff.py's input files.
-The deffference between the input structure of generate_idl_diff.py and
-that of print_diff.py is whether diffing tags are included or not.
- {'Interface': {
- 'diff_tag': 'deleted'
- 'ExtAttributes': [{'Name': '...'
- 'diff_tag': 'deleted'},
- ...,
- ],
- 'Consts': [{'Type': '...',
- 'Name': '...',
- 'Value': '...'
- 'diff_tag': 'deleted'},
- ...,
- ],
- 'Attributes': [{'Type': '...',
- 'Name': '...',
- 'ExtAttributes':[{'Name': '...'},
- ...,
- ]
- 'diff_tag': 'deleted'},
- ...,
- ],
- 'Operations': [{'Type': '...',
- 'Name': '...',
- 'ExtAttributes':[{'Name': '...'},
- ...,
- ],
- 'Arguments': [{'Type': '...',
- 'Name': '...'},
- ...,
- ]
- 'diff_tag': 'deleted'},
- ...,
- ],
- 'Name': '...'
- },
- {
- 'ExtAttributes': [{'Name': '...'},
- ...,
- ],
- 'Consts': [{'Type': '...',
- 'Name': '...',
- 'Value': '...'
- 'diff_tag': 'added'},
- ...,
- ],
- 'Attributes': [{'Type': '...',
- 'Name': '...',
- 'ExtAttributes':[{'Name': '...'},
- ...,
- ]},
- ...,
- ],
- 'Operations': [{'Type': '...',
- 'Name': '...',
- 'ExtAttributes':[{'Name': '...'},
- ...,
- ],
- 'Arguments': [{'Type': '...',
- 'Name': '...'},
- ...,
- ]
- 'diff_tag': 'deleted'},
- ...,
- ],
- 'Name': '...'
- },
- ...,
- }
-"""
-
-
-class Colorize(object):
- """This class outputs a colored text to sys.stdout.
- TODO(bashi): This class doesn't work on Windows. Provide a way to suppress
- escape sequences.
- """
-
- BLACK = 30
- RED = 31
- GREEN = 32
- YELLOW = 33
- COLORS = (BLACK, RED, GREEN, YELLOW)
-
- def __init__(self, out):
- self.out = out
-
- def reset_color(self):
- """Reset text's color to default.
- """
- self.out.write('\033[0m')
-
- def change_color(self, color):
- """Change text's color by specifing arguments.
- Args:
- color: A new color to change. It should be one of |COLORS|.
- """
- if color in self.COLORS:
- self.out.write('\033[' + str(color) + 'm')
- else:
- raise Exception('Unsupported color.')
-
- def writeln(self, string):
- """Print text with a line-break.
- """
- self.out.write(string + '\n')
-
- def write(self, string):
- """Print text without a line-break.
- """
- self.out.write(string)
-
-
-def sort_member_types(interface):
- """Sort the members in the order of EXTATTRIBUTES_AND_MEMBER_TYPES.
- Args:
- interface: An "interface" object
- Returns:
- A sorted "interface" object
- """
- sorted_interface = OrderedDict()
- for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
- sorted_interface[member_type] = interface.get(member_type)
- sorted_interface[DIFF_TAG] = interface.get(DIFF_TAG)
- return sorted_interface
-
-
-def group_by_tag(interface_or_member_list):
- """Group members of |interface_or_member_list| by tags.
- Args:
- interface_or_member_list: A list of interface names or a list of "members"
- Returns:
- A tuple of (removed, added, unchanged) where
- removed: A list of removed members
- added: A list of added members
- unspecified: A list of other members
- """
- removed = []
- added = []
- unspecified = []
- for interface_or_member in interface_or_member_list:
- if DIFF_TAG in interface_or_member:
- if interface_or_member[DIFF_TAG] == DIFF_TAG_DELETED:
- removed.append(interface_or_member)
- elif interface_or_member[DIFF_TAG] == DIFF_TAG_ADDED:
- added.append(interface_or_member)
- else:
- unspecified.append(interface_or_member)
- return (removed, added, unspecified)
-
-
-def sort_interface_names_by_tags(interfaces):
- """Sort interface names as follows.
- [names of deleted "interface"s
- -> names of added "interface"s
- -> names of other "interface"s]
- Args:
- interfaces: "interface" objects.
- Returns:
- A list of sorted interface names
- """
- interface_list = interfaces.values()
- removed, added, unspecified = group_by_tag(interface_list)
- removed = map(lambda interface: interface['Name'], removed)
- added = map(lambda interface: interface['Name'], added)
- unspecified = map(lambda interface: interface['Name'], unspecified)
- sorted_interface_names = removed + added + unspecified
- return sorted_interface_names
-
-
-def sort_members_by_tags(interface):
- """Sort members of a given interface in the order of diffing tags.
- Args:
- An "interface" object
- Returns:
- A sorted "interface" object
- """
- sorted_interface = OrderedDict()
- if DIFF_TAG in interface:
- return interface
- for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
- member_list = interface[member_type]
- removed, added, unspecified = group_by_tag(member_list)
- sorted_interface[member_type] = removed + added + unspecified
- return sorted_interface
-
-
-def sort_diff_by_tags(interfaces):
- """Sort an "interfaces" object in the order of diffing tags.
- Args:
- An "interfaces" object loaded by load_json_data().
- Returns:
- A sorted "interfaces" object
- """
- sorted_interfaces = OrderedDict()
- sorted_interface_names = sort_interface_names_by_tags(interfaces)
- for interface_name in sorted_interface_names:
- interface = sort_members_by_tags(interfaces[interface_name])
- sorted_interfaces[interface_name] = sort_member_types(interface)
- return sorted_interfaces
-
-
-def sort_members_in_alphabetical_order(interface):
- """Sort a "members" object in the alphabetical order.
- Args:
- An "interface" object
- Returns:
- A sorted "interface" object
- """
- sorted_interface = OrderedDict()
- for member_type in EXTATTRIBUTES_AND_MEMBER_TYPES:
- sorted_members = sorted(interface[member_type],
- key=lambda member: member['Name'])
- sorted_interface[member_type] = sorted_members
- return sorted_interface
-
-
-def sort_diff_in_alphabetical_order(interfaces):
- """Sort an "interfaces" object in the alphabetical order.
- Args:
- An "interfaces" object.
- Returns:
- A sorted "interfaces" object
- """
- sorted_interfaces = OrderedDict()
- for interface_name in sorted(interfaces.keys()):
- interface = interfaces[interface_name]
- sorted_interface = sort_members_in_alphabetical_order(interface)
- sorted_interface[DIFF_TAG] = interface.get(DIFF_TAG)
- sorted_interfaces[interface_name] = sorted_interface
- return sorted_interfaces
-
-
-def print_member_with_color(member, out):
- """Print the "member" with a colored text. '+' is added to an added
- "member". '-' is added to a removed "member".
- Args:
- member: A "member" object
- """
- if DIFF_TAG in member:
- if member[DIFF_TAG] == DIFF_TAG_DELETED:
- out.change_color(Colorize.RED)
- out.write('- ')
- elif member[DIFF_TAG] == DIFF_TAG_ADDED:
- out.change_color(Colorize.GREEN)
- out.write('+ ')
- else:
- out.change_color(Colorize.BLACK)
- out.write(' ')
-
-
-def print_extattributes(extattributes, out):
- """Print extattributes in an "interface" object.
- Args:
- A list of "ExtAttributes" in the "interface" object
- """
- for extattribute in extattributes:
- out.write(' ')
- print_member_with_color(extattribute, out)
- out.writeln(extattribute['Name'])
-
-
-def print_consts(consts, out):
- """Print consts in an "interface" object.
- Args:
- A list of "Consts" of the "interface" object
- """
- for const in consts:
- out.write(' ')
- print_member_with_color(const, out)
- out.write(str(const['Type']))
- out.write(' ')
- out.write(const['Name'])
- out.write(' ')
- out.writeln(const['Value'])
-
-
-def print_items(items, callback, out):
- """Calls |callback| for each item in |items|, printing commas between
- |callback| calls.
- Args:
- items: extattributes or arguments
- """
- count = 0
- for item in items:
- callback(item)
- count += 1
- if count < len(items):
- out.write(', ')
-
-
-def print_extattributes_in_member(extattributes, out):
- """Print extattributes in a "member" object.
- Args:
- A list of "ExtAttributes" in the "member" object
- """
- def callback(extattribute):
- out.write(extattribute['Name'])
-
- out.write('[')
- print_items(extattributes, callback, out)
- out.write(']')
-
-
-def print_attributes(attributes, out):
- """Print attributes in an "interface" object.
- Args:
- A list of "Attributes" in the "interface" object
- """
- for attribute in attributes:
- out.write(' ')
- print_member_with_color(attribute, out)
- if attribute['ExtAttributes']:
- print_extattributes_in_member(attribute['ExtAttributes'], out)
- out.write(str(attribute['Type']))
- out.write(' ')
- out.writeln(attribute['Name'])
-
-
-def print_arguments(arguments, out):
- """Print arguments in a "members" object named "Operations".
- Args: A list of "Arguments"
- """
- def callback(argument):
- out.write(argument['Name'])
-
- out.write('(')
- print_items(arguments, callback, out)
- out.writeln(')')
-
-
-def print_operations(operations, out):
- """Print operations in a "member" object.
- Args:
- A list of "Operations"
- """
- for operation in operations:
- out.write(' ')
- print_member_with_color(operation, out)
- if operation['ExtAttributes']:
- print_extattributes_in_member(operation['ExtAttributes'], out)
- out.write(str(operation['Type']))
- out.write(' ')
- if operation['Arguments']:
- out.write(operation['Name'])
- print_arguments(operation['Arguments'], out)
- else:
- out.writeln(operation['Name'])
-
-
-def print_diff(diff, out):
- """Print the diff on a shell.
- Args:
- A sorted diff
- """
- for interface_name, interface in diff.iteritems():
- print_member_with_color(interface, out)
- out.change_color(Colorize.YELLOW)
- out.write('[[')
- out.write(interface_name)
- out.writeln(']]')
- out.reset_color()
- for member_name, member in interface.iteritems():
- if member_name == 'ExtAttributes':
- out.writeln('ExtAttributes')
- print_extattributes(member, out)
- elif member_name == 'Consts':
- out.writeln(' Consts')
- print_consts(member, out)
- elif member_name == 'Attributes':
- out.writeln(' Attributes')
- print_attributes(member, out)
- elif member_name == 'Operations':
- out.writeln(' Operations')
- print_operations(member, out)
- out.reset_color()
-
-
-def print_usage():
- """Show usage."""
- sys.stdout.write('Usage: print_diff.py <diff_file.json> <"TAG"|"ALPHABET">\n')
-
-
-def main(argv):
- if len(argv) != 2:
- print_usage()
- exit(1)
- json_data = argv[0]
- order = argv[1]
- diff = load_json_file(json_data)
- if order == 'TAG':
- sort_func = sort_diff_by_tags
- elif order == 'ALPHABET':
- sort_func = sort_diff_in_alphabetical_order
- else:
- print_usage()
- exit(1)
- sorted_diff = sort_func(diff)
- out = Colorize(sys.stdout)
- print_diff(sorted_diff, out)
-
-
-if __name__ == '__main__':
- main(sys.argv[1:])

Powered by Google App Engine
This is Rietveld 408576698