Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 """This module provides shared functionality to provide Dart metadata for | 6 """This module provides shared functionality to provide Dart metadata for |
| 7 DOM APIs. | 7 DOM APIs. |
| 8 """ | 8 """ |
| 9 | 9 |
| 10 import copy | 10 import copy |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 385 'XMLHttpRequest.overrideMimeType': _no_ie_annotations, | 385 'XMLHttpRequest.overrideMimeType': _no_ie_annotations, |
| 386 'XMLHttpRequest.response': _all_but_ie9_annotations, | 386 'XMLHttpRequest.response': _all_but_ie9_annotations, |
| 387 'XMLHttpRequestProgressEvent': _webkit_experimental_annotations, | 387 'XMLHttpRequestProgressEvent': _webkit_experimental_annotations, |
| 388 'XSLTProcessor': [ | 388 'XSLTProcessor': [ |
| 389 "@SupportedBrowser(SupportedBrowser.CHROME)", | 389 "@SupportedBrowser(SupportedBrowser.CHROME)", |
| 390 "@SupportedBrowser(SupportedBrowser.FIREFOX)", | 390 "@SupportedBrowser(SupportedBrowser.FIREFOX)", |
| 391 "@SupportedBrowser(SupportedBrowser.SAFARI)", | 391 "@SupportedBrowser(SupportedBrowser.SAFARI)", |
| 392 ], | 392 ], |
| 393 }) | 393 }) |
| 394 | 394 |
| 395 # TODO(blois): minimize noise and enable by default. | |
| 396 _monitor_type_metadata = False | |
| 395 | 397 |
| 396 class DartMetadata(object): | 398 class DartMetadata(object): |
| 397 def __init__(self, api_status_path, doc_comments_path): | 399 def __init__(self, api_status_path, doc_comments_path): |
| 398 self._api_status_path = api_status_path | 400 self._api_status_path = api_status_path |
| 399 status_file = open(self._api_status_path, 'r+') | 401 status_file = open(self._api_status_path, 'r+') |
| 400 self._types = json.load(status_file) | 402 self._types = json.load(status_file) |
| 401 status_file.close() | 403 status_file.close() |
| 402 | 404 |
| 403 comments_file = open(doc_comments_path, 'r+') | 405 comments_file = open(doc_comments_path, 'r+') |
| 404 self._doc_comments = json.load(comments_file) | 406 self._doc_comments = json.load(comments_file) |
| 405 comments_file.close() | 407 comments_file.close() |
| 406 | 408 |
| 409 if _monitor_type_metadata: | |
| 410 monitored_interfaces = {} | |
| 411 for interface_id, interface_data in self._types.iteritems(): | |
| 412 monitored_interface = interface_data.copy() | |
| 413 monitored_interface['members'] = monitored.Dict( | |
| 414 'dartmetadata.%s' % interface_id, interface_data['members']) | |
| 415 | |
| 416 monitored_interfaces[interface_id] = monitored_interface | |
| 417 | |
| 418 self._monitored_types = monitored.Dict('dartmetadata._monitored_types', | |
| 419 monitored_interfaces) | |
| 420 else: | |
| 421 self._monitored_types = self._types | |
| 422 | |
| 407 def GetFormattedMetadata(self, library_name, interface, member_id=None, | 423 def GetFormattedMetadata(self, library_name, interface, member_id=None, |
| 408 indentation=''): | 424 indentation=''): |
| 409 """ Gets all comments and annotations for an interface or member. | 425 """ Gets all comments and annotations for an interface or member. |
| 410 """ | 426 """ |
| 411 return self.FormatMetadata( | 427 return self.FormatMetadata( |
| 412 self.GetMetadata(library_name, interface, member_id), | 428 self.GetMetadata(library_name, interface, member_id), |
| 413 indentation) | 429 indentation) |
| 414 | 430 |
| 415 def GetMetadata(self, library_name, interface, | 431 def GetMetadata(self, library_name, interface, |
| 416 member_name=None, source_member_name=None): | 432 member_name=None, source_member_name=None): |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 466 interface.id not in html_interface_renames): | 482 interface.id not in html_interface_renames): |
| 467 annotations.extend(_webkit_experimental_annotations) | 483 annotations.extend(_webkit_experimental_annotations) |
| 468 | 484 |
| 469 if (member_name and member_name.startswith('webkit') and | 485 if (member_name and member_name.startswith('webkit') and |
| 470 key not in renamed_html_members): | 486 key not in renamed_html_members): |
| 471 annotations.extend(_webkit_experimental_annotations) | 487 annotations.extend(_webkit_experimental_annotations) |
| 472 | 488 |
| 473 if source_member_name: | 489 if source_member_name: |
| 474 member_name = source_member_name | 490 member_name = source_member_name |
| 475 | 491 |
| 476 # TODO(blois): Emit support level annotations | 492 support_annotations = self._GetSupportLevelAnnotations( |
| 477 self._GetSupportLevelAnnotation(interface.id, member_name) | 493 interface.id, member_name) |
| 494 | |
| 495 for annotation in support_annotations: | |
| 496 if annotation not in annotations: | |
| 497 annotations.append(annotation) | |
| 478 | 498 |
| 479 return annotations | 499 return annotations |
| 480 | 500 |
| 481 def _GetComments(self, library_name, interface, member_name=None): | 501 def _GetComments(self, library_name, interface, member_name=None): |
| 482 """ Gets all comments for the interface or member and returns a list. """ | 502 """ Gets all comments for the interface or member and returns a list. """ |
| 483 | 503 |
| 484 # Add documentation from JSON. | 504 # Add documentation from JSON. |
| 485 comments = [] | 505 comments = [] |
| 486 library_name = 'dart.dom.%s' % library_name | 506 library_name = 'dart.dom.%s' % library_name |
| 487 if library_name in self._doc_comments: | 507 if library_name in self._doc_comments: |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 527 if ann2: | 547 if ann2: |
| 528 return ann2 + ann1 | 548 return ann2 + ann1 |
| 529 return ann1 | 549 return ann1 |
| 530 | 550 |
| 531 ann2 = _dart2js_annotations.get('-' + idl_type) | 551 ann2 = _dart2js_annotations.get('-' + idl_type) |
| 532 if ann2: | 552 if ann2: |
| 533 return ann2 | 553 return ann2 |
| 534 ann2 = _dart2js_annotations.get(idl_type) | 554 ann2 = _dart2js_annotations.get(idl_type) |
| 535 return ann2 | 555 return ann2 |
| 536 | 556 |
| 537 def _GetSupportLevel(self, interface_id, member_id=None): | 557 def _GetSupportInfo(self, interface_id, member_id=None): |
| 538 """ Looks up the interface or member in the DOM status list and returns the | 558 """ Looks up the interface or member in the DOM status list and returns the |
| 539 support level for it. | 559 support level for it. |
| 540 """ | 560 """ |
| 541 if interface_id in self._types: | 561 if interface_id in self._monitored_types: |
| 542 type_info = self._types[interface_id] | 562 type_info = self._monitored_types[interface_id] |
| 543 else: | 563 else: |
| 544 type_info = { | 564 type_info = { |
| 545 'members': {}, | 565 'members': {}, |
| 546 'support_level': 'untriaged', | 566 'support_level': 'untriaged', |
| 547 } | 567 } |
| 548 self._types[interface_id] = type_info | 568 self._types[interface_id] = type_info |
| 549 | 569 |
| 550 if not member_id: | 570 if not member_id: |
| 551 return type_info.get('support_level') | 571 return type_info |
| 552 | 572 |
| 553 members = type_info['members'] | 573 members = type_info['members'] |
| 554 | 574 |
| 555 if member_id in members: | 575 if member_id in members: |
| 556 member_info = members[member_id] | 576 member_info = members[member_id] |
| 557 else: | 577 else: |
| 558 if member_id == interface_id: | 578 if member_id == interface_id: |
| 559 member_info = {} | 579 member_info = {} |
| 560 else: | 580 else: |
| 561 member_info = {'support_level': 'untriaged'} | 581 member_info = {'support_level': 'untriaged'} |
| 562 members[member_id] = member_info | 582 members[member_id] = member_info |
| 563 | 583 |
| 564 support_level = member_info.get('support_level') | 584 return member_info |
| 565 # If unset then it inherits from the type. | |
| 566 if not support_level: | |
| 567 support_level = type_info.get('support_level') | |
| 568 return support_level | |
| 569 | 585 |
| 570 def _GetSupportLevelAnnotation(self, interface_id, member_id=None): | 586 def _GetSupportLevelAnnotations(self, interface_id, member_id=None): |
|
Andrei Mouravski
2013/05/22 10:07:00
Please add doc comments to this method.
blois
2013/05/22 17:59:10
Done.
| |
| 571 support_level = self._GetSupportLevel(interface_id, member_id) | 587 support_info = self._GetSupportInfo(interface_id, member_id) |
| 572 | 588 |
| 573 if support_level == 'untriaged': | 589 dart_action = support_info.get('dart_action') |
|
Andrei Mouravski
2013/05/22 10:07:00
What is the difference between dart_action and sup
blois
2013/05/22 17:59:10
support_level indicates the official status of the
| |
| 574 return '@Experimental' | 590 support_level = support_info.get('support_level') |
| 591 comment = support_info.get('comment') | |
| 592 annotations = [] | |
| 593 # TODO(blois): should add an annotation for the comment, but keeping out | |
| 594 # to keep the initial diff a bit more localized. | |
| 595 #if comment: | |
| 596 # annotations.append('// %s' % comment) | |
| 597 | |
| 598 if dart_action: | |
|
Andrei Mouravski
2013/05/22 10:07:00
There's a lot of duplication of code here.
Assumi
blois
2013/05/22 17:59:10
dart_actions override support_level. In later CLs,
| |
| 599 if dart_action == 'unstable': | |
| 600 annotations.append('@Unstable') | |
| 601 elif dart_action == 'experimental': | |
| 602 if comment: | |
| 603 annotations.append('// %s' % comment) | |
| 604 annotations.append('@Experimental // %s' % support_level) | |
| 605 elif dart_action == 'suppress': | |
| 606 if comment: | |
| 607 annotations.append('// %s' % comment) | |
| 608 annotations.append('@deprecated // %s' % support_level) | |
| 609 # TODO (blois): suppress generation of these APIs as a separate CL. | |
| 610 pass | |
| 611 else: | |
| 612 _logger.warn('Unknown dart_action - %s:%s' % (interface_id, member_id)) | |
| 613 elif support_level == 'untriaged': | |
| 614 annotations.append('@Experimental // untriaged') | |
| 575 elif support_level == 'experimental': | 615 elif support_level == 'experimental': |
| 576 return '@Experimental' | 616 if comment: |
| 617 annotations.append('// %s' % comment) | |
| 618 annotations.append('@Experimental') | |
| 577 elif support_level == 'nonstandard': | 619 elif support_level == 'nonstandard': |
| 578 return '@Experimental' | 620 if comment: |
| 621 annotations.append('// %s' % comment) | |
| 622 annotations.append('@Experimental // non-standard') | |
| 579 elif support_level == 'stable': | 623 elif support_level == 'stable': |
| 580 return | 624 pass |
| 581 elif support_level == 'deprecated': | 625 elif support_level == 'deprecated': |
| 582 return '@Deprecated' | 626 if comment: |
| 627 annotations.append('// %s' % comment) | |
| 628 annotations.append('@Deprecated') | |
| 629 elif support_level is None: | |
| 630 pass | |
| 583 else: | 631 else: |
| 584 _logger.warn('Unknown support_level - %s:%s' % (interface_id, member_id)) | 632 _logger.warn('Unknown support_level - %s:%s' % (interface_id, member_id)) |
| 585 | 633 |
| 634 return annotations | |
| 635 | |
| 586 def Flush(self): | 636 def Flush(self): |
| 587 json_file = open(self._api_status_path, 'w+') | 637 json_file = open(self._api_status_path, 'w+') |
| 588 json.dump(self._types, json_file, indent=2, separators=(',', ': '), sort_key s=True) | 638 json.dump(self._types, json_file, indent=2, separators=(',', ': '), sort_key s=True) |
| 589 json_file.close() | 639 json_file.close() |
| OLD | NEW |