blob: 07d9950d33ecffd654e632cf02808ca6b2ea4c5b [file] [log] [blame]
#!/usr/bin/env python3
import sys, os
import argparse
def fix_comments(f, o):
space_string = ''
for line in f:
# Skip lines with // comments
if space_string == '' and line.find('//') != -1:
o.write(line)
continue
sc = line.find("/*")
ec = line.find("*/")
# Skip /* foo bar */ comments
if sc != -1 and ec != -1:
o.write(line)
else:
# Start of /* comment */
if sc != -1:
space_string = (''.join(' ' for i in range(sc+1)))
o.write(line)
elif space_string != '':
# Already in /* comment */
ls = line.lstrip()
# Empty line, write aligned comment prefix
if len(ls) == 0:
o.write(space_string + "*" + "\n")
elif ls[0] != '*':
#
# Fix comments like '********* sth **********'
# to look like ' * ********** sth **********'
#
o.write(space_string + "* " + ls)
else:
# Rest of the /* comment */
o.write(space_string + ls)
else:
# Outside /* comment */
o.write(line)
# Moving outside /* comment */
if ec != -1:
space_string = ''
def fix_template_operators(f, o):
for line in f:
line = line.replace('<<>', '< <>');
line = line.replace('><>', '> <>');
line = line.replace('==<>', '== <>');
line = line.replace('!=<>', '!= <>');
o.write(line);
def main(argv):
parser = argparse.ArgumentParser(description='Tool for fixing clang code formatting')
parser.add_argument('--inplace', dest='inplace',
action='store_true',
help='Inplace edit specified file')
parser.add_argument('--fix-comments', dest='fix_comments',
action='store_const',
const='fix_comments',
help='Fix C like box comments')
parser.add_argument('--fix-template-operators', dest='fix_template_operators',
action='store_const',
const='fix_template_operators',
help='Fix C++ template operators e.g. operator<<> => operator< <>')
parser.add_argument('--input', dest='inputfile', action='store',
help='Input file')
parser.add_argument('--output', dest='outputfile', action='store',
help='Output file')
args = parser.parse_args(argv[1:]);
for p in args.fix_comments, args.fix_template_operators:
if not p:
continue
fin = open(args.inputfile, 'r')
if args.inplace:
fout = open(args.inputfile + '.bak', 'w')
else:
fout = open(args.outputfile, 'w');
eval('' + p + '(fin, fout)')
fin.close();
fout.close();
if args.inplace:
os.rename(args.inputfile + '.bak', args.inputfile)
if __name__ == "__main__":
main(sys.argv)