]>
git.madduck.net Git - etc/vim.git/blobdiff - black.py
madduck's git repository
Every one of the projects in this repository is available at the canonical
URL git://git.madduck.net/madduck/pub/<projectpath> — see
each project's metadata for the exact URL.
All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@ git. madduck. net .
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
SSH access, as well as push access can be individually
arranged .
If you use my repositories frequently, consider adding the following
snippet to ~/.gitconfig and using the third clone URL listed for each
project:
[url "git://git.madduck.net/madduck/"]
insteadOf = madduck:
return
elif len(sources) == 1:
return
elif len(sources) == 1:
- return_code = run_single_file_mode(
- line_length, check, fast, quiet, write_back, sources[0]
- )
+ return_code = reformat_one(sources[0], line_length, fast, quiet, write_back)
- return_code = run_multi_file_mode(line_length, fast, quiet, write_back, sources)
+ loop = asyncio.get_event_loop()
+ executor = ProcessPoolExecutor(max_workers=os.cpu_count())
+ return_code = 1
+ try:
+ return_code = loop.run_until_complete(
+ schedule_formatting(
+ sources, line_length, write_back, fast, quiet, loop, executor
+ )
+ )
+ finally:
+ shutdown(loop)
-def run_single_file_mode(
- line_length: int,
- check: bool,
- fast: bool,
- quiet: bool,
- write_back: WriteBack,
- src: Path,
+def reformat_one(
+ src: Path, line_length: int, fast: bool, quiet: bool, write_back: WriteBack
- report = Report(check=check, quiet=quiet)
+ """Reformat a single file under `src` without spawning child processes.
+
+ 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`.
+ """
+ report = Report(check=write_back is WriteBack.NO, quiet=quiet)
if not src.is_file() and str(src) == "-":
if not src.is_file() and str(src) == "-":
- changed = format_stdin_to_stdout(
+ if format_stdin_to_stdout(
line_length=line_length, fast=fast, write_back=write_back
line_length=line_length, fast=fast, write_back=write_back
+ ):
+ changed = Changed.YES
cache: Cache = {}
if write_back != WriteBack.DIFF:
cache = read_cache()
src = src.resolve()
if src in cache and cache[src] == get_cache_info(src):
changed = Changed.CACHED
cache: Cache = {}
if write_back != WriteBack.DIFF:
cache = read_cache()
src = src.resolve()
if src in cache and cache[src] == get_cache_info(src):
changed = Changed.CACHED
- if changed is not Changed.CACHED:
- changed = format_file_in_place(
+ if (
+ changed is not Changed.CACHED
+ and format_file_in_place(
src, line_length=line_length, fast=fast, write_back=write_back
)
src, line_length=line_length, fast=fast, write_back=write_back
)
+ ):
+ changed = Changed.YES
if write_back != WriteBack.DIFF and changed is not Changed.NO:
write_cache(cache, [src])
report.done(src, changed)
if write_back != WriteBack.DIFF and changed is not Changed.NO:
write_cache(cache, [src])
report.done(src, changed)
return report.return_code
return report.return_code
-def run_multi_file_mode(
- line_length: int,
- fast: bool,
- quiet: bool,
- write_back: WriteBack,
- sources: List[Path],
-) -> int:
- loop = asyncio.get_event_loop()
- executor = ProcessPoolExecutor(max_workers=os.cpu_count())
- return_code = 1
- try:
- return_code = loop.run_until_complete(
- schedule_formatting(
- sources, line_length, write_back, fast, quiet, loop, executor
- )
- )
- finally:
- shutdown(loop)
- return return_code
-
-
async def schedule_formatting(
sources: List[Path],
line_length: int,
async def schedule_formatting(
sources: List[Path],
line_length: int,
report.failed(src, str(task.exception()))
else:
formatted.append(src)
report.failed(src, str(task.exception()))
else:
formatted.append(src)
- report.done(src, task.result() )
+ report.done(src, Changed.YES if task.result() else Changed.NO )
if cancelled:
await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
if cancelled:
await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
fast: bool,
write_back: WriteBack = WriteBack.NO,
lock: Any = None, # multiprocessing.Manager().Lock() is some crazy proxy
fast: bool,
write_back: WriteBack = WriteBack.NO,
lock: Any = None, # multiprocessing.Manager().Lock() is some crazy proxy
"""Format file under `src` path. Return True if changed.
If `write_back` is True, write reformatted code back to stdout.
"""Format file under `src` path. Return True if changed.
If `write_back` is True, write reformatted code back to stdout.
src_contents, line_length=line_length, fast=fast
)
except NothingChanged:
src_contents, line_length=line_length, fast=fast
)
except NothingChanged:
if write_back == write_back.YES:
with open(src, "w", encoding=src_buffer.encoding) as f:
if write_back == write_back.YES:
with open(src, "w", encoding=src_buffer.encoding) as f:
finally:
if lock:
lock.release()
finally:
if lock:
lock.release()
def format_stdin_to_stdout(
line_length: int, fast: bool, write_back: WriteBack = WriteBack.NO
def format_stdin_to_stdout(
line_length: int, fast: bool, write_back: WriteBack = WriteBack.NO
"""Format file on stdin. Return True if changed.
If `write_back` is True, write reformatted code back to stdout.
"""Format file on stdin. Return True if changed.
If `write_back` is True, write reformatted code back to stdout.
dst = src
try:
dst = format_file_contents(src, line_length=line_length, fast=fast)
dst = src
try:
dst = format_file_contents(src, line_length=line_length, fast=fast)
finally:
if write_back == WriteBack.YES:
finally:
if write_back == WriteBack.YES:
def max_delimiter_priority_in_atom(node: LN) -> int:
def max_delimiter_priority_in_atom(node: LN) -> int:
+ """Return maximum delimiter priority inside `node`.
+
+ This is specific to atoms with contents contained in a pair of parentheses.
+ If `node` isn't an atom or there are no enclosing parentheses, returns 0.
+ """
if node.type != syms.atom:
return 0
if node.type != syms.atom:
return 0