1695b41eeSopenharmony_ci#!/usr/bin/env python3
2695b41eeSopenharmony_ci
3695b41eeSopenharmony_ciimport os
4695b41eeSopenharmony_ci
5695b41eeSopenharmony_ciignores = [
6695b41eeSopenharmony_ci	'.git/',
7695b41eeSopenharmony_ci	'misc/afl-fuzz-tokens/',
8695b41eeSopenharmony_ci	'ninja_deps',
9695b41eeSopenharmony_ci	'src/depfile_parser.cc',
10695b41eeSopenharmony_ci	'src/lexer.cc',
11695b41eeSopenharmony_ci]
12695b41eeSopenharmony_ci
13695b41eeSopenharmony_cierror_count = 0
14695b41eeSopenharmony_ci
15695b41eeSopenharmony_cidef error(path, msg):
16695b41eeSopenharmony_ci	global error_count
17695b41eeSopenharmony_ci	error_count += 1
18695b41eeSopenharmony_ci	print('\x1b[1;31m{}\x1b[0;31m{}\x1b[0m'.format(path, msg))
19695b41eeSopenharmony_ci
20695b41eeSopenharmony_cifor root, directory, filenames in os.walk('.'):
21695b41eeSopenharmony_ci	for filename in filenames:
22695b41eeSopenharmony_ci		path = os.path.join(root, filename)[2:]
23695b41eeSopenharmony_ci		if any([path.startswith(x) for x in ignores]):
24695b41eeSopenharmony_ci			continue
25695b41eeSopenharmony_ci		with open(path, 'rb') as file:
26695b41eeSopenharmony_ci			line_nr = 1
27695b41eeSopenharmony_ci			try:
28695b41eeSopenharmony_ci				for line in [x.decode() for x in file.readlines()]:
29695b41eeSopenharmony_ci					if len(line) == 0 or line[-1] != '\n':
30695b41eeSopenharmony_ci						error(path, ' missing newline at end of file.')
31695b41eeSopenharmony_ci					if len(line) > 1:
32695b41eeSopenharmony_ci						if line[-2] == '\r':
33695b41eeSopenharmony_ci							error(path, ' has Windows line endings.')
34695b41eeSopenharmony_ci							break
35695b41eeSopenharmony_ci						if line[-2] == ' ' or line[-2] == '\t':
36695b41eeSopenharmony_ci							error(path, ':{} has trailing whitespace.'.format(line_nr))
37695b41eeSopenharmony_ci					line_nr += 1
38695b41eeSopenharmony_ci			except UnicodeError:
39695b41eeSopenharmony_ci				pass # binary file
40695b41eeSopenharmony_ci
41695b41eeSopenharmony_ciexit(error_count)
42