def lint(): pip_tool( "flake8", *(f for f in tools.all_files() if f.endswith(".py")), "--config", os.path.join(tools.ROOT, ".flake8"), ) codespell(*(f for f in tools.all_files() if not f.endswith("by-domain.txt")))
def lint(): pip_tool( 'flake8', *[f for f in tools.all_files() if f.endswith('.py')], '--config', os.path.join(tools.ROOT, '.flake8'), )
def lint(): pip_tool( "flake8", *[f for f in tools.all_files() if f.endswith(".py")], "--config", os.path.join(tools.ROOT, ".flake8"), )
def format(): def should_format_file(path): if "vendor" in path.split(os.path.sep): return False return path.endswith(".py") changed = tools.modified_files() format_all = os.environ.get("FORMAT_ALL", "").lower() == "true" if "requirements/tools.txt" in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return for f in files_to_format: lines = [] with open(f, encoding="utf-8") as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == "#!": shebang = l continue if "END HEADER" in l and not header_done: lines = [] header_done = True else: lines.append(l) source = "".join(lines).strip() with open(f, "w", encoding="utf-8") as o: if shebang is not None: o.write(shebang) o.write("\n") o.write(HEADER) if source: o.write("\n\n") o.write(source) o.write("\n") pip_tool("isort", *files_to_format) pip_tool("black", *files_to_format)
def check_format(): format() n = max(map(len, VALID_STARTS)) bad = False for f in tools.all_files(): if not f.endswith(".py"): continue with open(f, encoding="utf-8") as i: start = i.read(n) if not any(start.startswith(s) for s in VALID_STARTS): print(f"{f} has incorrect start {start!r}", file=sys.stderr) bad = True assert not bad check_not_changed()
def check_format(): format() n = max(map(len, VALID_STARTS)) bad = False for f in tools.all_files(): if not f.endswith(".py"): continue with open(f, "r", encoding="utf-8") as i: start = i.read(n) if not any(start.startswith(s) for s in VALID_STARTS): print("%s has incorrect start %r" % (f, start), file=sys.stderr) bad = True assert not bad check_not_changed()
def check_format(): format() n = max(map(len, VALID_STARTS)) bad = False for f in tools.all_files(): if not f.endswith('.py'): continue with open(f, 'r', encoding='utf-8') as i: start = i.read(n) if not any(start.startswith(s) for s in VALID_STARTS): print('%s has incorrect start %r' % (f, start), file=sys.stderr) bad = True assert not bad check_not_changed()
def check_format(): format() n = max(map(len, VALID_STARTS)) bad = False for f in tools.all_files(): if not f.endswith('.py'): continue with open(f, 'r', encoding='utf-8') as i: start = i.read(n) if not any(start.startswith(s) for s in VALID_STARTS): print( '%s has incorrect start %r' % (f, start), file=sys.stderr) bad = True if bad: sys.exit(1) check_not_changed()
def lint(): pip_tool( "flake8", *[f for f in tools.all_files() if f.endswith(".py")], "--config", os.path.join(tools.ROOT, ".flake8"), ) # Check for redefined test functions, where e.g. a copy-pasted definition # will shadow the earlier test and Pytest never sees or executes it. pip_tool( "pylint", "--score=n", "--jobs=0", "--disable=all", "--enable=function-redefined", "hypothesis-python/tests/", )
import hypothesistooling as tools sys.path.append(os.path.dirname(__file__)) # noqa def should_format_file(path): if os.path.basename(path) in ('header.py', 'test_lambda_formatting.py'): return False if 'vendor' in path.split(os.path.sep): return False return path.endswith('.py') if __name__ == '__main__': changed = tools.modified_files() format_all = os.environ.get('FORMAT_ALL', '').lower() == 'true' if 'scripts/header.py' in changed: # We've changed the header, so everything needs its header updated. format_all = True if 'requirements/tools.txt' in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed for f in sorted(files): if should_format_file(f): print(f)
# coding=utf-8 # # This file is part of Hypothesis, which may be found at # https://github.com/HypothesisWorks/hypothesis/ # # Most of this work is copyright (C) 2013-2019 David R. MacIver # ([email protected]), but it contains contributions by others. See # CONTRIBUTING.rst for a full list of people who may hold copyright, and # consult the git log if you need to determine who owns an individual # contribution. # # This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. # # END HEADER from __future__ import absolute_import, division, print_function import subprocess import hypothesistooling as tools import hypothesistooling.installers as install SCRIPTS = [f for f in tools.all_files() if f.endswith(".sh")] def test_all_shell_scripts_are_valid(): subprocess.check_call([install.SHELLCHECK, *SCRIPTS], cwd=tools.ROOT)
def check_shellcheck(): install.ensure_shellcheck() subprocess.check_call([install.SHELLCHECK] + [f for f in tools.all_files() if f.endswith('.sh')])
# This file is part of Hypothesis, which may be found at # https://github.com/HypothesisWorks/hypothesis/ # # Most of this work is copyright (C) 2013-2020 David R. MacIver # ([email protected]), but it contains contributions by others. See # CONTRIBUTING.rst for a full list of people who may hold copyright, and # consult the git log if you need to determine who owns an individual # contribution. # # This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. # # END HEADER import subprocess import hypothesistooling as tools import hypothesistooling.installers as install SCRIPTS = [f for f in tools.all_files() if f.endswith(".sh")] def test_all_shell_scripts_are_valid(): subprocess.check_call( [install.SHELLCHECK, "--exclude=SC1073,SC1072", *SCRIPTS], cwd=tools.ROOT)
# This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. # # END HEADER import os import hypothesistooling as tools import hypothesistooling.projects.hypothesispython as hp from hypothesistooling.scripts import pip_tool def is_sphinx(f): f = os.path.abspath(f) return f.startswith(os.path.join(hp.HYPOTHESIS_PYTHON, "docs")) ALL_RST = [ f for f in tools.all_files() if os.path.basename(f) != "RELEASE.rst" and f.endswith(".rst") ] def test_passes_rst_lint(): pip_tool("rst-lint", *[f for f in ALL_RST if not is_sphinx(f)]) def test_passes_flake8(): pip_tool("flake8", "--select=W191,W291,W292,W293,W391", *ALL_RST)
def format(): def should_format_file(path): if os.path.basename(path) in ('header.py', 'test_lambda_formatting.py'): return False if 'vendor' in path.split(os.path.sep): return False return path.endswith('.py') changed = tools.modified_files() format_all = os.environ.get('FORMAT_ALL', '').lower() == 'true' if 'scripts/header.py' in changed: # We've changed the header, so everything needs its header updated. format_all = True if 'requirements/tools.txt' in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return for f in files_to_format: print(f) lines = [] with open(f, encoding='utf-8') as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == '#!': shebang = l continue if 'END HEADER' in l and not header_done: lines = [] header_done = True else: lines.append(l) source = ''.join(lines).strip() with open(f, 'w', encoding='utf-8') as o: if shebang is not None: o.write(shebang) o.write('\n') o.write(HEADER) if source: o.write('\n\n') o.write(source) o.write('\n') pip_tool( 'isort', '-p', 'hypothesis', '-ls', '-m', '2', '-w', '75', '-a', 'from __future__ import absolute_import, print_function, division', *files_to_format, ) pip_tool('pyformat', '-i', *files_to_format)
def format(): def should_format_file(path): return path.endswith(".py") def should_format_doc_file(path): return path.endswith((".rst", ".md")) changed = tools.modified_files() format_all = os.environ.get("FORMAT_ALL", "").lower() == "true" if "requirements/tools.txt" in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed doc_files_to_format = [f for f in sorted(files) if should_format_doc_file(f)] pip_tool("blacken-docs", *doc_files_to_format) files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return # .coveragerc lists several regex patterns to treat as nocover pragmas, and # we want to find (and delete) cases where # pragma: no cover is redundant. def warn(msg): raise Exception(msg) config = CoverageConfig() config.from_file(os.path.join(hp.BASE_DIR, ".coveragerc"), warn=warn, our_file=True) pattern = "|".join(l for l in config.exclude_list if "pragma" not in l) unused_pragma_pattern = re.compile(f"(({pattern}).*) # pragma: no (branch|cover)") for f in files_to_format: lines = [] with open(f, encoding="utf-8") as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == "#!": shebang = l continue if "END HEADER" in l and not header_done: lines = [] header_done = True else: lines.append(unused_pragma_pattern.sub(r"\1", l)) source = "".join(lines).strip() with open(f, "w", encoding="utf-8") as o: if shebang is not None: o.write(shebang) o.write("\n") o.write(HEADER) if source: o.write("\n\n") o.write(source) o.write("\n") codespell("--write-changes", *files_to_format, *doc_files_to_format) pip_tool("shed", *files_to_format, *doc_files_to_format)
def format(): def should_format_file(path): if os.path.basename(path) in ( 'header.py', 'test_lambda_formatting.py' ): return False if 'vendor' in path.split(os.path.sep): return False return path.endswith('.py') changed = tools.modified_files() format_all = os.environ.get('FORMAT_ALL', '').lower() == 'true' if 'scripts/header.py' in changed: # We've changed the header, so everything needs its header updated. format_all = True if 'requirements/tools.txt' in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return for f in files_to_format: print(f) lines = [] with open(f, encoding='utf-8') as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == '#!': shebang = l continue if 'END HEADER' in l and not header_done: lines = [] header_done = True else: lines.append(l) source = ''.join(lines).strip() with open(f, 'w', encoding='utf-8') as o: if shebang is not None: o.write(shebang) o.write('\n') o.write(HEADER) if source: o.write('\n\n') o.write(source) o.write('\n') pip_tool( 'isort', '-p', 'hypothesis', '-ls', '-m', '2', '-w', '75', '-a', 'from __future__ import absolute_import, print_function, division', *files_to_format, ) pip_tool('pyformat', '-i', *files_to_format)
def format(): def should_format_file(path): if "vendor" in path.split(os.path.sep): return False return path.endswith(".py") changed = tools.modified_files() format_all = os.environ.get("FORMAT_ALL", "").lower() == "true" if "requirements/tools.txt" in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return for f in files_to_format: lines = [] with open(f, encoding="utf-8") as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == "#!": shebang = l continue if "END HEADER" in l and not header_done: lines = [] header_done = True else: lines.append(l) source = "".join(lines).strip() with open(f, "w", encoding="utf-8") as o: if shebang is not None: o.write(shebang) o.write("\n") o.write(HEADER) if source: o.write("\n\n") o.write(source) o.write("\n") pip_tool( "autoflake", "--recursive", "--in-place", "--exclude=compat.py", "--remove-all-unused-imports", "--remove-duplicate-keys", "--remove-unused-variables", *files_to_format, ) pip_tool("pyupgrade", "--keep-percent-format", *files_to_format) pip_tool("isort", *files_to_format) pip_tool("black", *files_to_format)
def format(): def should_format_file(path): return path.endswith(".py") def should_format_doc_file(path): return path.endswith((".rst", ".md")) changed = tools.modified_files() format_all = os.environ.get("FORMAT_ALL", "").lower() == "true" if "requirements/tools.txt" in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed doc_files_to_format = [ f for f in sorted(files) if should_format_doc_file(f) ] pip_tool("blacken-docs", *doc_files_to_format) files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return # .coveragerc lists several regex patterns to treat as nocover pragmas, and # we want to find (and delete) cases where # pragma: no cover is redundant. config = CoverageConfig() config.from_file(os.path.join(hp.BASE_DIR, ".coveragerc"), our_file=True) pattern = "|".join(l for l in config.exclude_list if "pragma" not in l) unused_pragma_pattern = re.compile(f"({pattern}).*# pragma: no cover") for f in files_to_format: lines = [] with open(f, encoding="utf-8") as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == "#!": shebang = l continue if "END HEADER" in l and not header_done: lines = [] header_done = True elif unused_pragma_pattern.search(l) is not None: lines.append(l.replace("# pragma: no cover", "")) else: lines.append(l) source = "".join(lines).strip() with open(f, "w", encoding="utf-8") as o: if shebang is not None: o.write(shebang) o.write("\n") o.write(HEADER) if source: o.write("\n\n") o.write(source) o.write("\n") pip_tool( "autoflake", "--recursive", "--in-place", "--exclude=compat.py", "--remove-all-unused-imports", "--remove-duplicate-keys", "--remove-unused-variables", *files_to_format, ) pip_tool("pyupgrade", "--keep-percent-format", "--py36-plus", *files_to_format) pip_tool("isort", *files_to_format) pip_tool("black", "--target-version=py36", *files_to_format)
# This file is part of Hypothesis, which may be found at # https://github.com/HypothesisWorks/hypothesis-python # # Most of this work is copyright (C) 2013-2018 David R. MacIver # ([email protected]), but it contains contributions by others. See # CONTRIBUTING.rst for a full list of people who may hold copyright, and # consult the git log if you need to determine who owns an individual # contribution. # # This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at http://mozilla.org/MPL/2.0/. # # END HEADER from __future__ import division, print_function, absolute_import import subprocess import hypothesistooling as tools import hypothesistooling.installers as install SCRIPTS = [ f for f in tools.all_files() if f.endswith('.sh') ] def test_all_shell_scripts_are_valid(): subprocess.check_call([install.SHELLCHECK, *SCRIPTS], cwd=tools.ROOT)
def format(): def should_format_file(path): if "vendor" in path.split(os.path.sep): return False return path.endswith(".py") def should_format_doc_file(path): return path.endswith((".rst", ".md")) changed = tools.modified_files() format_all = os.environ.get("FORMAT_ALL", "").lower() == "true" if "requirements/tools.txt" in changed: # We've changed the tools, which includes a lot of our formatting # logic, so we need to rerun formatters. format_all = True files = tools.all_files() if format_all else changed doc_files_to_format = [ f for f in sorted(files) if should_format_doc_file(f) ] pip_tool("blacken-docs", *doc_files_to_format) files_to_format = [f for f in sorted(files) if should_format_file(f)] if not files_to_format: return for f in files_to_format: lines = [] with open(f, encoding="utf-8") as o: shebang = None first = True header_done = False for l in o.readlines(): if first: first = False if l[:2] == "#!": shebang = l continue if "END HEADER" in l and not header_done: lines = [] header_done = True else: lines.append(l) source = "".join(lines).strip() with open(f, "w", encoding="utf-8") as o: if shebang is not None: o.write(shebang) o.write("\n") o.write(HEADER) if source: o.write("\n\n") o.write(source) o.write("\n") pip_tool( "autoflake", "--recursive", "--in-place", "--exclude=compat.py", "--remove-all-unused-imports", "--remove-duplicate-keys", "--remove-unused-variables", *files_to_format, ) pip_tool("pyupgrade", "--keep-percent-format", *files_to_format) pip_tool("isort", *files_to_format) pip_tool("black", *files_to_format)
# coding=utf-8 # # This file is part of Hypothesis, which may be found at # https://github.com/HypothesisWorks/hypothesis-python # # Most of this work is copyright (C) 2013-2018 David R. MacIver # ([email protected]), but it contains contributions by others. See # CONTRIBUTING.rst for a full list of people who may hold copyright, and # consult the git log if you need to determine who owns an individual # contribution. # # This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at http://mozilla.org/MPL/2.0/. # # END HEADER from __future__ import division, print_function, absolute_import import subprocess import hypothesistooling as tools import hypothesistooling.installers as install SCRIPTS = [f for f in tools.all_files() if f.endswith('.sh')] def test_all_shell_scripts_are_valid(): subprocess.check_call([install.SHELLCHECK, *SCRIPTS], cwd=tools.ROOT)