| Index: third_party/grpc/src/objective-c/change-comments.py
|
| diff --git a/third_party/grpc/src/objective-c/change-comments.py b/third_party/grpc/src/objective-c/change-comments.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..9aa0e0c9f5a196ff66f0269a907528d2a2244d43
|
| --- /dev/null
|
| +++ b/third_party/grpc/src/objective-c/change-comments.py
|
| @@ -0,0 +1,128 @@
|
| +#!/usr/bin/env python2.7
|
| +# Copyright 2015, Google Inc.
|
| +# All rights reserved.
|
| +#
|
| +# Redistribution and use in source and binary forms, with or without
|
| +# modification, are permitted provided that the following conditions are
|
| +# met:
|
| +#
|
| +# * Redistributions of source code must retain the above copyright
|
| +# notice, this list of conditions and the following disclaimer.
|
| +# * Redistributions in binary form must reproduce the above
|
| +# copyright notice, this list of conditions and the following disclaimer
|
| +# in the documentation and/or other materials provided with the
|
| +# distribution.
|
| +# * Neither the name of Google Inc. nor the names of its
|
| +# contributors may be used to endorse or promote products derived from
|
| +# this software without specific prior written permission.
|
| +#
|
| +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
| +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
| +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
| +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
| +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
| +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
| +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
| +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
| +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| +
|
| +"""Change comments style of source files from // to /** */"""
|
| +
|
| +import re
|
| +import sys
|
| +
|
| +
|
| +if len(sys.argv) < 2:
|
| + print("Please provide at least one source file name as argument.")
|
| + sys.exit()
|
| +
|
| +for file_name in sys.argv[1:]:
|
| +
|
| + print("Modifying format of {file} comments in place...".format(
|
| + file=file_name,
|
| + ))
|
| +
|
| +
|
| + # Input
|
| +
|
| + with open(file_name, "r") as input_file:
|
| + lines = input_file.readlines()
|
| +
|
| + def peek():
|
| + return lines[0]
|
| +
|
| + def read_line():
|
| + return lines.pop(0)
|
| +
|
| + def more_input_available():
|
| + return lines
|
| +
|
| +
|
| + # Output
|
| +
|
| + output_lines = []
|
| +
|
| + def write(line):
|
| + output_lines.append(line)
|
| +
|
| + def flush_output():
|
| + with open(file_name, "w") as output_file:
|
| + for line in output_lines:
|
| + output_file.write(line)
|
| +
|
| +
|
| + # Pattern matching
|
| +
|
| + comment_regex = r'^(\s*)//\s(.*)$'
|
| +
|
| + def is_comment(line):
|
| + return re.search(comment_regex, line)
|
| +
|
| + def isnt_comment(line):
|
| + return not is_comment(line)
|
| +
|
| + def next_line(predicate):
|
| + return more_input_available() and predicate(peek())
|
| +
|
| +
|
| + # Transformation
|
| +
|
| + def indentation_of(line):
|
| + match = re.search(comment_regex, line)
|
| + return match.group(1)
|
| +
|
| + def content(line):
|
| + match = re.search(comment_regex, line)
|
| + return match.group(2)
|
| +
|
| + def format_as_block(comment_block):
|
| + if len(comment_block) == 0:
|
| + return []
|
| +
|
| + indent = indentation_of(comment_block[0])
|
| +
|
| + if len(comment_block) == 1:
|
| + return [indent + "/** " + content(comment_block[0]) + " */\n"]
|
| +
|
| + block = ["/**"] + [" * " + content(line) for line in comment_block] + [" */"]
|
| + return [indent + line.rstrip() + "\n" for line in block]
|
| +
|
| +
|
| + # Main algorithm
|
| +
|
| + while more_input_available():
|
| + while next_line(isnt_comment):
|
| + write(read_line())
|
| +
|
| + comment_block = []
|
| + # Get all lines in the same comment block. We could restrict the indentation
|
| + # to be the same as the first line of the block, but it's probably ok.
|
| + while (next_line(is_comment)):
|
| + comment_block.append(read_line())
|
| +
|
| + for line in format_as_block(comment_block):
|
| + write(line)
|
| +
|
| + flush_output()
|
|
|