xref: /aosp_15_r20/external/deqp/scripts/src_util/check_whitespace.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*-
2*35238bceSAndroid Build Coastguard Worker
3*35238bceSAndroid Build Coastguard Worker#-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities
5*35238bceSAndroid Build Coastguard Worker# --------------------------------------
6*35238bceSAndroid Build Coastguard Worker#
7*35238bceSAndroid Build Coastguard Worker# Copyright 2015 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker#
9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker#
13*35238bceSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker#
15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker# limitations under the License.
20*35238bceSAndroid Build Coastguard Worker#
21*35238bceSAndroid Build Coastguard Worker#-------------------------------------------------------------------------
22*35238bceSAndroid Build Coastguard Worker
23*35238bceSAndroid Build Coastguard Workerimport sys
24*35238bceSAndroid Build Coastguard Workerfrom argparse import ArgumentParser
25*35238bceSAndroid Build Coastguard Workerfrom common import getChangedFiles, getAllProjectFiles, isTextFile
26*35238bceSAndroid Build Coastguard Worker
27*35238bceSAndroid Build Coastguard Workerdef checkFileWhitespace (file):
28*35238bceSAndroid Build Coastguard Worker    if (sys.version_info < (3, 0)):
29*35238bceSAndroid Build Coastguard Worker        f = open(file, 'rt')
30*35238bceSAndroid Build Coastguard Worker    else:
31*35238bceSAndroid Build Coastguard Worker        f = open(file, 'rt', encoding="ascii", errors='replace', newline='')
32*35238bceSAndroid Build Coastguard Worker    error = False
33*35238bceSAndroid Build Coastguard Worker    for lineNum, line in enumerate(f):
34*35238bceSAndroid Build Coastguard Worker        if line.endswith(" \n") or line.endswith("\t\n"):
35*35238bceSAndroid Build Coastguard Worker            error = True
36*35238bceSAndroid Build Coastguard Worker            print("%s:%i trailing whitespace" % (file, lineNum+1))
37*35238bceSAndroid Build Coastguard Worker        if " \t" in line:
38*35238bceSAndroid Build Coastguard Worker            error = True
39*35238bceSAndroid Build Coastguard Worker            print("%s:%i merged <space><tab>" % (file, lineNum+1))
40*35238bceSAndroid Build Coastguard Worker        if line.endswith("\r") or line.endswith("\r\n"):
41*35238bceSAndroid Build Coastguard Worker            error = True
42*35238bceSAndroid Build Coastguard Worker            print("%s:%i incorrect line ending" % (file, lineNum+1))
43*35238bceSAndroid Build Coastguard Worker    f.close()
44*35238bceSAndroid Build Coastguard Worker
45*35238bceSAndroid Build Coastguard Worker    return not error
46*35238bceSAndroid Build Coastguard Worker
47*35238bceSAndroid Build Coastguard Workerdef checkWhitespace (files):
48*35238bceSAndroid Build Coastguard Worker    error = False
49*35238bceSAndroid Build Coastguard Worker    for file in files:
50*35238bceSAndroid Build Coastguard Worker        if isTextFile(file):
51*35238bceSAndroid Build Coastguard Worker            if not checkFileWhitespace(file):
52*35238bceSAndroid Build Coastguard Worker                error = True
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker    return not error
55*35238bceSAndroid Build Coastguard Worker
56*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__":
57*35238bceSAndroid Build Coastguard Worker    parser = ArgumentParser()
58*35238bceSAndroid Build Coastguard Worker    parser.add_argument("-e", "--only-errors",  action="store_true", dest="onlyErrors",   default=False, help="Print only on error")
59*35238bceSAndroid Build Coastguard Worker    parser.add_argument("-i", "--only-changed", action="store_true", dest="useGitIndex",  default=False, help="Check only modified files. Uses git.")
60*35238bceSAndroid Build Coastguard Worker
61*35238bceSAndroid Build Coastguard Worker    args = parser.parse_args()
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker    if args.useGitIndex:
64*35238bceSAndroid Build Coastguard Worker        files = getChangedFiles()
65*35238bceSAndroid Build Coastguard Worker    else:
66*35238bceSAndroid Build Coastguard Worker        files = getAllProjectFiles()
67*35238bceSAndroid Build Coastguard Worker
68*35238bceSAndroid Build Coastguard Worker    error = not checkWhitespace(files)
69*35238bceSAndroid Build Coastguard Worker
70*35238bceSAndroid Build Coastguard Worker    if error:
71*35238bceSAndroid Build Coastguard Worker        print("One or more checks failed")
72*35238bceSAndroid Build Coastguard Worker        sys.exit(1)
73*35238bceSAndroid Build Coastguard Worker    if not args.onlyErrors:
74*35238bceSAndroid Build Coastguard Worker        print("All checks passed")
75