Refactor reformat_one and schedule_formatting to decrease state

This commit is contained in:
Łukasz Langa 2018-04-23 11:48:01 -07:00
parent c012c70176
commit 3ddf73337d

View File

@ -191,43 +191,38 @@ def main(
write_back = WriteBack.DIFF write_back = WriteBack.DIFF
else: else:
write_back = WriteBack.YES write_back = WriteBack.YES
report = Report(check=check, quiet=quiet)
if len(sources) == 0: if len(sources) == 0:
ctx.exit(0) ctx.exit(0)
return return
elif len(sources) == 1: elif len(sources) == 1:
return_code = reformat_one( reformat_one(sources[0], line_length, fast, write_back, report)
sources[0], line_length, fast, quiet, write_back, check
)
else: else:
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
executor = ProcessPoolExecutor(max_workers=os.cpu_count()) executor = ProcessPoolExecutor(max_workers=os.cpu_count())
return_code = 1
try: try:
return_code = loop.run_until_complete( loop.run_until_complete(
schedule_formatting( schedule_formatting(
sources, line_length, write_back, fast, quiet, loop, executor, check sources, line_length, fast, write_back, report, loop, executor
) )
) )
finally: finally:
shutdown(loop) shutdown(loop)
ctx.exit(return_code) if not quiet:
out("All done! ✨ 🍰 ✨")
click.echo(str(report))
ctx.exit(report.return_code)
def reformat_one( def reformat_one(
src: Path, src: Path, line_length: int, fast: bool, write_back: WriteBack, report: "Report"
line_length: int, ) -> None:
fast: bool,
quiet: bool,
write_back: WriteBack,
check: bool,
) -> int:
"""Reformat a single file under `src` without spawning child processes. """Reformat a single file under `src` without spawning child processes.
If `quiet` is True, non-error messages are not output. `line_length`, If `quiet` is True, non-error messages are not output. `line_length`,
`write_back`, and `fast` options are passed to :func:`format_file_in_place`. `write_back`, and `fast` options are passed to :func:`format_file_in_place`.
""" """
report = Report(check=check, quiet=quiet)
try: try:
changed = Changed.NO changed = Changed.NO
if not src.is_file() and str(src) == "-": if not src.is_file() and str(src) == "-":
@ -254,19 +249,17 @@ def reformat_one(
report.done(src, changed) report.done(src, changed)
except Exception as exc: except Exception as exc:
report.failed(src, str(exc)) report.failed(src, str(exc))
return report.return_code
async def schedule_formatting( async def schedule_formatting(
sources: List[Path], sources: List[Path],
line_length: int, line_length: int,
write_back: WriteBack,
fast: bool, fast: bool,
quiet: bool, write_back: WriteBack,
report: "Report",
loop: BaseEventLoop, loop: BaseEventLoop,
executor: Executor, executor: Executor,
check: bool, ) -> None:
) -> int:
"""Run formatting of `sources` in parallel using the provided `executor`. """Run formatting of `sources` in parallel using the provided `executor`.
(Use ProcessPoolExecutors for actual parallelism.) (Use ProcessPoolExecutors for actual parallelism.)
@ -274,7 +267,6 @@ async def schedule_formatting(
`line_length`, `write_back`, and `fast` options are passed to `line_length`, `write_back`, and `fast` options are passed to
:func:`format_file_in_place`. :func:`format_file_in_place`.
""" """
report = Report(check=check, quiet=quiet)
cache: Cache = {} cache: Cache = {}
if write_back != WriteBack.DIFF: if write_back != WriteBack.DIFF:
cache = read_cache() cache = read_cache()
@ -319,16 +311,9 @@ async def schedule_formatting(
if cancelled: if cancelled:
await asyncio.gather(*cancelled, loop=loop, return_exceptions=True) await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
elif not quiet:
out("All done! ✨ 🍰 ✨")
if not quiet:
click.echo(str(report))
if write_back != WriteBack.DIFF and formatted: if write_back != WriteBack.DIFF and formatted:
write_cache(cache, formatted) write_cache(cache, formatted)
return report.return_code
def format_file_in_place( def format_file_in_place(
src: Path, src: Path,