DF-Walkthrough/misc/lint.py
2015-09-30 22:29:52 +10:00

50 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""Check for tabs and trailing whitespace in text files in all subdirs.
Any other automatic checks should be in this file too.
"""
from io import open
import os
from os.path import *
import sys
text_extensions = ('rst', 'md', 'txt', 'html', 'css', 'js')
def error(fname, lineno, issue):
"""Print the problem and location."""
print('ERROR: {}:{} - {}'.format(fname, lineno+1, issue))
def lint(path):
"""Run linters on all files, print problem files."""
print('Checking for tabs or trailing whitespace...')
failed = False
for root, _, files in os.walk(path):
for f in files:
fname = join(root, f)
if '_build' in fname or not any(
fname.endswith(ext) for ext in text_extensions):
continue
with open(fname, encoding='utf-8') as fh:
for i, line in enumerate(fh.readlines()):
if len(line) > 81:
failed = True
error(fname, i, 'too long')
if line.replace('\n', '') != line.rstrip():
failed = True
error(fname, i, 'trailing space')
if '\t' in line:
error(fname, i, 'contains tab')
if failed:
print('Use your text editor to convert tabs to spaces, wrap lines '
'or trim trailing whitespace with minimal effort.')
sys.exit(failed)
print('All files are OK')
if __name__ == '__main__':
# lint everything in the parent directory, wherever the script is run from.
p = relpath(join(dirname(__file__), '..'))
lint(p)