Auto merge of #25749 - richo:python3, r=alexcrichton
This is enough to make `make tidy` work if you're using python3 There's definitely more stuff to do, but PR'ing now to avoid bitrot
This commit is contained in:
commit
5a2c766cdd
@ -1,138 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
|
||||
# file at the top-level directory of this distribution and at
|
||||
# http://rust-lang.org/COPYRIGHT.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
# option. This file may not be copied, modified, or distributed
|
||||
# except according to those terms.
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) <= 1:
|
||||
print('Usage: %s [ --apply ] filename1.rs filename2.rs ...'
|
||||
% sys.argv[0])
|
||||
elif sys.argv[1] == '--apply':
|
||||
for filename in sys.argv[2:]:
|
||||
patch(filename)
|
||||
else:
|
||||
for filename in sys.argv[1:]:
|
||||
diff(filename)
|
||||
|
||||
|
||||
def patch(filename):
|
||||
source = read(filename)
|
||||
rewritten = rewrite_bytes_macros(source)
|
||||
if rewritten is not None and rewritten != source:
|
||||
write(filename, rewritten)
|
||||
|
||||
|
||||
def diff(filename):
|
||||
rewritten = rewrite_bytes_macros(read(filename))
|
||||
if rewritten is not None:
|
||||
p = subprocess.Popen(['diff', '-u', filename, '-'],
|
||||
stdin=subprocess.PIPE)
|
||||
p.stdin.write(rewritten)
|
||||
p.stdin.close()
|
||||
p.wait()
|
||||
|
||||
|
||||
def read(filename):
|
||||
with open(filename, 'rb') as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
def write(filename, content):
|
||||
with open(filename, 'wb') as f:
|
||||
f.write(content)
|
||||
|
||||
|
||||
def rewrite_bytes_macros(source):
|
||||
rewritten, num_occurrences = BYTES_MACRO_RE.subn(rewrite_one_macro, source)
|
||||
if num_occurrences > 0:
|
||||
return rewritten
|
||||
|
||||
|
||||
BYTES_MACRO_RE = re.compile(br'bytes!\( (?P<args> [^)]* ) \)', re.VERBOSE)
|
||||
|
||||
|
||||
def rewrite_one_macro(match):
|
||||
try:
|
||||
bytes = parse_bytes(split_args(match.group('args')))
|
||||
return b'b"' + b''.join(map(escape, bytes)) + b'"'
|
||||
except SkipThisRewrite:
|
||||
print('Skipped: %s' % match.group(0).decode('utf8', 'replace'))
|
||||
return match.group(0)
|
||||
|
||||
|
||||
class SkipThisRewrite(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def split_args(args):
|
||||
previous = b''
|
||||
for arg in args.split(b','):
|
||||
if previous:
|
||||
arg = previous + b',' + arg
|
||||
if arg.count(b'"') % 2 == 0:
|
||||
yield arg
|
||||
previous = b''
|
||||
else:
|
||||
previous = arg
|
||||
if previous:
|
||||
yield previous
|
||||
|
||||
|
||||
def parse_bytes(args):
|
||||
for arg in args:
|
||||
arg = arg.strip()
|
||||
if (arg.startswith(b'"') and arg.endswith(b'"')) or (
|
||||
arg.startswith(b"'") and arg.endswith(b"'")):
|
||||
# Escaped newline means something different in Rust and Python.
|
||||
if b'\\\n' in arg:
|
||||
raise SkipThisRewrite
|
||||
for byte in eval(b'u' + arg).encode('utf8'):
|
||||
yield ord(byte)
|
||||
else:
|
||||
if arg.endswith(b'u8'):
|
||||
arg = arg[:-2]
|
||||
# Assume that all Rust integer literals
|
||||
# are valid Python integer literals
|
||||
value = int(eval(arg))
|
||||
assert value <= 0xFF
|
||||
yield value
|
||||
|
||||
|
||||
def escape(byte):
|
||||
c = chr(byte)
|
||||
escaped = {
|
||||
b'\0': br'\0',
|
||||
b'\t': br'\t',
|
||||
b'\n': br'\n',
|
||||
b'\r': br'\r',
|
||||
b'\'': b'\\\'',
|
||||
b'\\': br'\\',
|
||||
}.get(c)
|
||||
if escaped is not None:
|
||||
return escaped
|
||||
elif b' ' <= c <= b'~':
|
||||
return chr(byte)
|
||||
else:
|
||||
return ('\\x%02X' % byte).encode('ascii')
|
||||
|
||||
|
||||
if str is not bytes:
|
||||
# Python 3.x
|
||||
ord = lambda x: x
|
||||
chr = lambda x: bytes([x])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -34,7 +34,7 @@ if __name__ == '__main__':
|
||||
summaries.append((fname, summary))
|
||||
|
||||
def count(t):
|
||||
return sum(map(lambda (f, s): len(s.get(t, [])), summaries))
|
||||
return sum(map(lambda f: len(f[1].get(t, [])), summaries))
|
||||
|
||||
logfiles = sys.argv[1:]
|
||||
for files in map(glob.glob, logfiles):
|
||||
@ -43,15 +43,15 @@ if __name__ == '__main__':
|
||||
failed = count('failed')
|
||||
ignored = count('ignored')
|
||||
measured = count('bench')
|
||||
print "summary of %d test runs: %d passed; %d failed; %d ignored; %d measured" % \
|
||||
(len(logfiles), ok, failed, ignored, measured)
|
||||
print ""
|
||||
print("summary of %d test runs: %d passed; %d failed; %d ignored; %d measured" %
|
||||
(len(logfiles), ok, failed, ignored, measured))
|
||||
print("")
|
||||
|
||||
if failed > 0:
|
||||
print "failed tests:"
|
||||
print("failed tests:")
|
||||
for f, s in summaries:
|
||||
failures = s.get('failed', [])
|
||||
if len(failures) > 0:
|
||||
print " %s:" % (f)
|
||||
print(" %s:" % (f))
|
||||
for test in failures:
|
||||
print " %s" % (test)
|
||||
print(" %s" % (test))
|
||||
|
@ -16,7 +16,7 @@ import os
|
||||
import re
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print "usage: errorck.py <src-dir>"
|
||||
print("usage: errorck.py <src-dir>")
|
||||
sys.exit(1)
|
||||
|
||||
src_dir = sys.argv[1]
|
||||
|
@ -18,10 +18,13 @@
|
||||
# since the same version
|
||||
# * Prints information about features
|
||||
|
||||
import sys, os, re
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import codecs
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print "usage: featurkck.py <src-dir>"
|
||||
print("usage: featureck.py <src-dir>")
|
||||
sys.exit(1)
|
||||
|
||||
src_dir = sys.argv[1]
|
||||
@ -47,7 +50,7 @@ with open(feature_gate_source, 'r') as f:
|
||||
line = line.replace("(", "").replace("),", "").replace(")", "")
|
||||
parts = line.split(",")
|
||||
if len(parts) != 3:
|
||||
print "error: unexpected number of components in line: " + original_line
|
||||
print("error: unexpected number of components in line: " + original_line)
|
||||
sys.exit(1)
|
||||
feature_name = parts[0].strip().replace('"', "")
|
||||
since = parts[1].strip().replace('"', "")
|
||||
@ -79,7 +82,7 @@ for (dirpath, dirnames, filenames) in os.walk(src_dir):
|
||||
continue
|
||||
|
||||
path = os.path.join(dirpath, filename)
|
||||
with open(path, 'r') as f:
|
||||
with codecs.open(filename=path, mode='r', encoding="utf-8") as f:
|
||||
line_num = 0
|
||||
for line in f:
|
||||
line_num += 1
|
||||
@ -107,9 +110,9 @@ for (dirpath, dirnames, filenames) in os.walk(src_dir):
|
||||
if not mm is None:
|
||||
since = mm.group(1)
|
||||
else:
|
||||
print "error: misformed stability attribute"
|
||||
print "line " + str(line_num) + " of " + path + ":"
|
||||
print line
|
||||
print("error: misformed stability attribute")
|
||||
print("line %d of %:" % (line_num, path))
|
||||
print(line)
|
||||
errors = True
|
||||
|
||||
lib_features[feature_name] = feature_name
|
||||
@ -123,24 +126,24 @@ for (dirpath, dirnames, filenames) in os.walk(src_dir):
|
||||
(expected_since, source_path, source_line_num, source_line) = \
|
||||
lib_features_and_level.get((feature_name, level))
|
||||
if since != expected_since:
|
||||
print "error: mismatch in " + level + " feature '" + feature_name + "'"
|
||||
print "line " + str(source_line_num) + " of " + source_path + ":"
|
||||
print source_line
|
||||
print "line " + str(line_num) + " of " + path + ":"
|
||||
print line
|
||||
print("error: mismatch in %s feature '%s'" % (level, feature_name))
|
||||
print("line %d of %s:" % (source_line_num, source_path))
|
||||
print(source_line)
|
||||
print("line %d of %s:" % (line_num, path))
|
||||
print(line)
|
||||
errors = True
|
||||
|
||||
# Verify that this lib feature doesn't duplicate a lang feature
|
||||
if feature_name in language_feature_names:
|
||||
print "error: lib feature '" + feature_name + "' duplicates a lang feature"
|
||||
print "line " + str(line_num) + " of " + path + ":"
|
||||
print line
|
||||
print("error: lib feature '%s' duplicates a lang feature" % (feature_name))
|
||||
print("line %d of %s:" % (line_num, path))
|
||||
print(line)
|
||||
errors = True
|
||||
|
||||
else:
|
||||
print "error: misformed stability attribute"
|
||||
print "line " + str(line_num) + " of " + path + ":"
|
||||
print line
|
||||
print("error: misformed stability attribute")
|
||||
print("line %d of %s:" % (line_num, path))
|
||||
print(line)
|
||||
errors = True
|
||||
|
||||
# Merge data about both lists
|
||||
@ -175,7 +178,7 @@ for f in lib_features:
|
||||
is_unstable = lib_features_and_level.get((name, "unstable")) is not None
|
||||
|
||||
if is_stable and is_unstable:
|
||||
print "error: feature '" + name + "' is both stable and unstable"
|
||||
print("error: feature '%s' is both stable and unstable" % (name))
|
||||
errors = True
|
||||
|
||||
if is_stable:
|
||||
@ -192,7 +195,7 @@ merged_stats = { }
|
||||
for name in lib_feature_stats:
|
||||
if language_feature_stats.get(name) is not None:
|
||||
if not name in joint_features:
|
||||
print "error: feature '" + name + "' is both a lang and lib feature but not whitelisted"
|
||||
print("error: feature '%s' is both a lang and lib feature but not whitelisted" % (name))
|
||||
errors = True
|
||||
lang_status = language_feature_stats[name][3]
|
||||
lib_status = lib_feature_stats[name][3]
|
||||
@ -200,13 +203,13 @@ for name in lib_feature_stats:
|
||||
lib_stable_since = lib_feature_stats[name][4]
|
||||
|
||||
if lang_status != lib_status and lib_status != "deprecated":
|
||||
print "error: feature '" + name + "' has lang status " + lang_status + \
|
||||
" but lib status " + lib_status
|
||||
print("error: feature '%s' has lang status %s " +
|
||||
"but lib status %s" % (name, lang_status, lib_status))
|
||||
errors = True
|
||||
|
||||
if lang_stable_since != lib_stable_since:
|
||||
print "error: feature '" + name + "' has lang stable since " + lang_stable_since + \
|
||||
" but lib stable since " + lib_stable_since
|
||||
print("error: feature '%s' has lang stable since %s " +
|
||||
"but lib stable since %s" % (name, lang_stable_since, lib_stable_since))
|
||||
errors = True
|
||||
|
||||
merged_stats[name] = (name, True, True, lang_status, lang_stable_since)
|
||||
@ -240,5 +243,5 @@ lines.sort()
|
||||
|
||||
print
|
||||
for line in lines:
|
||||
print "* " + line
|
||||
print("* " + line)
|
||||
print
|
||||
|
@ -81,7 +81,7 @@ check_cr = True
|
||||
check_linelength = True
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print "usage: tidy.py <src-dir>"
|
||||
print("usage: tidy.py <src-dir>")
|
||||
sys.exit(1)
|
||||
|
||||
src_dir = sys.argv[1]
|
||||
@ -200,10 +200,10 @@ except UnicodeDecodeError as e:
|
||||
|
||||
print
|
||||
for ext in sorted(file_counts, key=file_counts.get, reverse=True):
|
||||
print "* linted {} {} files".format(file_counts[ext], ext)
|
||||
print "* linted {} other files".format(count_other_linted_files)
|
||||
print "* total lines of code: {}".format(count_lines)
|
||||
print "* total non-blank lines of code: {}".format(count_non_blank_lines)
|
||||
print
|
||||
print("* linted {} {} files".format(file_counts[ext], ext))
|
||||
print("* linted {} other files".format(count_other_linted_files))
|
||||
print("* total lines of code: {}".format(count_lines))
|
||||
print("* total non-blank lines of code: {}".format(count_non_blank_lines))
|
||||
print()
|
||||
|
||||
sys.exit(err)
|
||||
|
Loading…
Reference in New Issue
Block a user