Skip to content

Commit

Permalink
pythonGH-109408: Move the Python file whitespace check from patchchec…
Browse files Browse the repository at this point in the history
…k to pre-commit (python#109891)

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
  • Loading branch information
2 people authored and Glyphack committed Jan 27, 2024
1 parent 5295e1f commit 2d6f00d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 25 deletions.
9 changes: 9 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,15 @@ repos:
- id: trailing-whitespace
types_or: [c, inc, python, rst]

- repo: local
hooks:
- id: python-file-whitespace
name: "Check Python file whitespace"
entry: 'python Tools/patchcheck/reindent.py --nobackup --newline LF'
language: 'system'
types: [python]
exclude: '^(Lib/test/tokenizedata/|Tools/c-analyzer/cpython/_parser).*$'

- repo: https://github.com/sphinx-contrib/sphinx-lint
rev: v0.6.8
hooks:
Expand Down
32 changes: 7 additions & 25 deletions Tools/patchcheck/patchcheck.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import subprocess
import sysconfig

import reindent
import untabify


Expand Down Expand Up @@ -184,21 +183,6 @@ def report_modified_files(file_paths):
})


@status("Fixing Python file whitespace", info=report_modified_files)
def normalize_whitespace(file_paths):
"""Make sure that the whitespace for .py files have been normalized."""
reindent.makebackup = False # No need to create backups.
fixed = [
path for path in file_paths
if (
path.endswith('.py')
and path not in _PYTHON_FILES_WITH_TABS
and reindent.check(os.path.join(SRCDIR, path))
)
]
return fixed


@status("Fixing C file whitespace", info=report_modified_files)
def normalize_c_whitespace(file_paths):
"""Report if any C files """
Expand Down Expand Up @@ -256,10 +240,8 @@ def ci(pull_request):
return
base_branch = get_base_branch()
file_paths = changed_files(base_branch)
python_files = [fn for fn in file_paths if fn.endswith('.py')]
c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
fixed = []
fixed.extend(normalize_whitespace(python_files))
fixed.extend(normalize_c_whitespace(c_files))
if not fixed:
print('No whitespace issues found')
Expand All @@ -273,13 +255,10 @@ def ci(pull_request):
def main():
base_branch = get_base_branch()
file_paths = changed_files(base_branch)
python_files = [fn for fn in file_paths if fn.endswith('.py')]
c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
doc_files = [fn for fn in file_paths if fn.startswith('Doc') and
fn.endswith(('.rst', '.inc'))]
misc_files = {p for p in file_paths if p.startswith('Misc')}
# PEP 8 whitespace rules enforcement.
normalize_whitespace(python_files)
# C rules enforcement.
normalize_c_whitespace(c_files)
# Docs updated.
Expand All @@ -294,10 +273,13 @@ def main():
regenerated_pyconfig_h_in(file_paths)

# Test suite run and passed.
if python_files or c_files:
end = " and check for refleaks?" if c_files else "?"
print()
print("Did you run the test suite" + end)
has_c_files = any(fn for fn in file_paths if fn.endswith(('.c', '.h')))
has_python_files = any(fn for fn in file_paths if fn.endswith('.py'))
print()
if has_c_files:
print("Did you run the test suite and check for refleaks?")
elif has_python_files:
print("Did you run the test suite?")


if __name__ == '__main__':
Expand Down

0 comments on commit 2d6f00d

Please sign in to comment.