mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
584656dff3
Summary: Turned on the auto formatter. Ran `arc lint --apply-patches --take BLACK **/*.py`. Then run `arc lint` again so some other autofixers like spellchecker etc. looked at the code base. Manually accept the changes whenever they make sense, or use a workaround (ex. changing "dict()" to "dict constructor") where autofix is false positive. Disabled linters on files that are hard (i18n/polib.py) to fix, or less interesting to fix (hgsubversion tests), or cannot be fixed without breaking OSS build (FBPYTHON4). Conflicted linters (test-check-module-imports.t, part of test-check-code.t, test-check-pyflakes.t) are removed or disabled. Duplicated linters (test-check-pyflakes.t, test-check-pylint.t) are removed. An issue of the auto-formatter is lines are no longer guarnateed to be <= 80 chars. But that seems less important comparing with the benefit auto-formatter provides. As we're here, also remove test-check-py3-compat.t, as it is currently broken if `PYTHON3=/bin/python3` is set. Reviewed By: wez, phillco, simpkins, pkaush, singhsrb Differential Revision: D8173629 fbshipit-source-id: 90e248ae0c5e6eaadbe25520a6ee42d32005621b
96 lines
2.5 KiB
Python
Executable File
96 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
""" Convert mercurial check-code errors into a format
|
|
that plays nicely with arc lint """
|
|
from __future__ import absolute_import, print_function
|
|
|
|
import errno
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
import utils
|
|
|
|
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
|
|
# Normalize the list of files that we should report on
|
|
wanted = set()
|
|
for path in sys.argv[1:]:
|
|
wanted.add(os.path.relpath(path))
|
|
|
|
# Export LINTFILES so tests can skip unrelated files
|
|
if wanted:
|
|
os.environ["LINTFILES"] = "\n".join(sorted(wanted))
|
|
|
|
args = ["-l", "test-check-code-hg.t", "test-check-pyflakes-hg.t"]
|
|
|
|
try:
|
|
proc = utils.spawnruntests(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
except OSError as ex:
|
|
if ex.errno == errno.ENOENT:
|
|
print(
|
|
"lint.py:1: ERROR:ENVIRON: Please either set "
|
|
+ "MERCURIALRUNTEST var to the full path to run-tests.py, "
|
|
+ "or add the containing directory to your $PATH"
|
|
)
|
|
else:
|
|
print("lint.py:1: ERROR:OSError: %r" % ex)
|
|
sys.exit(0)
|
|
|
|
output, error = proc.communicate()
|
|
|
|
context_file = None
|
|
lines = error.split("\n")
|
|
# We expect a run of 3 lines to describe the error, with the first
|
|
# of those to look like a filename and line number location
|
|
while lines:
|
|
line = lines[0]
|
|
lines.pop(0)
|
|
|
|
# test-check-pyflakes-hg style output
|
|
m = re.match("^\+ ([a-zA-Z0-9_./-]+):(\d+): (.*)$", line)
|
|
if m:
|
|
filename, location, why = m.groups()
|
|
if filename in wanted:
|
|
print("%s:%s: ERROR:Pyflakes: %s" % (filename, location, why))
|
|
continue
|
|
|
|
# test-check-code-hg style output
|
|
if re.match("^--- (.*)$", line):
|
|
context_file = os.path.relpath(line[4:])
|
|
continue
|
|
|
|
m = re.match("^\+ (Skipping (.*) it has no.*)$", line)
|
|
if m:
|
|
filename = m.group(2)
|
|
if filename in wanted:
|
|
print(
|
|
"%s:0: ERROR:CheckCode: Update %s to add %s"
|
|
% (filename, context_file, m.group(1))
|
|
)
|
|
continue
|
|
|
|
if not re.match("^\+ +[a-zA-Z0-9_./-]+:\d+:$", line):
|
|
continue
|
|
|
|
if len(lines) < 2:
|
|
continue
|
|
|
|
location = line
|
|
context = lines.pop(0) # we ignore this
|
|
why = lines.pop(0)
|
|
|
|
location = location[1:].strip() # strip off the "+ " bit
|
|
location = location.rstrip(":")
|
|
filename, lineno = location.split(":")
|
|
|
|
if filename not in wanted:
|
|
# lint doesn't care about this file.
|
|
continue
|
|
|
|
why = why[1:].strip()
|
|
|
|
print("%s: ERROR:CheckCode: %s" % (location, why))
|