mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
Issue #19358: "make clinic" now runs the Argument Clinic preprocessor
over all CPython source files.
This commit is contained in:
parent
ebdcb50b8a
commit
dcd340eeeb
3 changed files with 36 additions and 3 deletions
|
@ -988,7 +988,6 @@ class BlockPrinter:
|
|||
dsl_name = block.dsl_name
|
||||
write = self.f.write
|
||||
|
||||
assert (not input) or (input.endswith('\n'))
|
||||
assert not ((dsl_name == None) ^ (output == None)), "you must specify dsl_name and output together, dsl_name " + repr(dsl_name)
|
||||
|
||||
if not dsl_name:
|
||||
|
@ -1122,12 +1121,16 @@ def parse_file(filename, *, verify=True, output=None, encoding='utf-8'):
|
|||
clinic = Clinic(language, verify=verify, filename=filename)
|
||||
|
||||
with open(filename, 'r', encoding=encoding) as f:
|
||||
text = clinic.parse(f.read())
|
||||
raw = f.read()
|
||||
|
||||
cooked = clinic.parse(raw)
|
||||
if cooked == raw:
|
||||
return
|
||||
|
||||
directory = os.path.dirname(filename) or '.'
|
||||
|
||||
with tempfile.TemporaryDirectory(prefix="clinic", dir=directory) as tmpdir:
|
||||
bytes = text.encode(encoding)
|
||||
bytes = cooked.encode(encoding)
|
||||
tmpfilename = os.path.join(tmpdir, os.path.basename(filename))
|
||||
with open(tmpfilename, "wb") as f:
|
||||
f.write(bytes)
|
||||
|
@ -2619,6 +2622,7 @@ def main(argv):
|
|||
cmdline.add_argument("-f", "--force", action='store_true')
|
||||
cmdline.add_argument("-o", "--output", type=str)
|
||||
cmdline.add_argument("--converters", action='store_true')
|
||||
cmdline.add_argument("--make", action='store_true')
|
||||
cmdline.add_argument("filename", type=str, nargs="*")
|
||||
ns = cmdline.parse_args(argv)
|
||||
|
||||
|
@ -2697,6 +2701,23 @@ def main(argv):
|
|||
print("All return converters also accept (doc_default=None).")
|
||||
sys.exit(0)
|
||||
|
||||
if ns.make:
|
||||
if ns.output or ns.filename:
|
||||
print("Usage error: can't use -o or filenames with --make.")
|
||||
print()
|
||||
cmdline.print_usage()
|
||||
sys.exit(-1)
|
||||
for root, dirs, files in os.walk('.'):
|
||||
for rcs_dir in ('.svn', '.git', '.hg'):
|
||||
if rcs_dir in dirs:
|
||||
dirs.remove(rcs_dir)
|
||||
for filename in files:
|
||||
if not filename.endswith('.c'):
|
||||
continue
|
||||
path = os.path.join(root, filename)
|
||||
parse_file(path, verify=not ns.force)
|
||||
return
|
||||
|
||||
if not ns.filename:
|
||||
cmdline.print_usage()
|
||||
sys.exit(-1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue