1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2020 The Android Open Source Project 3*6dbdd20aSAndroid Build Coastguard Worker# 4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*6dbdd20aSAndroid Build Coastguard Worker# 8*6dbdd20aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*6dbdd20aSAndroid Build Coastguard Worker# 10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License. 15*6dbdd20aSAndroid Build Coastguard Worker 16*6dbdd20aSAndroid Build Coastguard Worker# This tool checks for inline comments in proto files 17*6dbdd20aSAndroid Build Coastguard Worker 18*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import absolute_import 19*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import division 20*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import print_function 21*6dbdd20aSAndroid Build Coastguard Worker 22*6dbdd20aSAndroid Build Coastguard Workerimport os 23*6dbdd20aSAndroid Build Coastguard Workerimport re 24*6dbdd20aSAndroid Build Coastguard Workerimport sys 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 27*6dbdd20aSAndroid Build Coastguard Worker 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard Workerdef main(): 30*6dbdd20aSAndroid Build Coastguard Worker errors = 0 31*6dbdd20aSAndroid Build Coastguard Worker # Don't want to check protos/third_party: 32*6dbdd20aSAndroid Build Coastguard Worker protos_root = os.path.join(ROOT_DIR, 'protos', 'perfetto') 33*6dbdd20aSAndroid Build Coastguard Worker for root, _, files in os.walk(protos_root): 34*6dbdd20aSAndroid Build Coastguard Worker for fname in files: 35*6dbdd20aSAndroid Build Coastguard Worker fpath = os.path.join(root, fname) 36*6dbdd20aSAndroid Build Coastguard Worker if not os.path.isfile(fpath): 37*6dbdd20aSAndroid Build Coastguard Worker continue 38*6dbdd20aSAndroid Build Coastguard Worker if not fpath.endswith('.proto'): 39*6dbdd20aSAndroid Build Coastguard Worker continue 40*6dbdd20aSAndroid Build Coastguard Worker with open(fpath, encoding='UTF-8') as f: 41*6dbdd20aSAndroid Build Coastguard Worker lines = f.readlines() 42*6dbdd20aSAndroid Build Coastguard Worker for line in lines: 43*6dbdd20aSAndroid Build Coastguard Worker comm = line.find('//') 44*6dbdd20aSAndroid Build Coastguard Worker alt_comm = re.search(r'^\s*\*', line) 45*6dbdd20aSAndroid Build Coastguard Worker only_comm = re.search(r'^\s*//', line) 46*6dbdd20aSAndroid Build Coastguard Worker 47*6dbdd20aSAndroid Build Coastguard Worker # Allow comments only if not inline 48*6dbdd20aSAndroid Build Coastguard Worker if comm == -1 or alt_comm or only_comm: 49*6dbdd20aSAndroid Build Coastguard Worker continue 50*6dbdd20aSAndroid Build Coastguard Worker 51*6dbdd20aSAndroid Build Coastguard Worker rel_path = os.path.relpath(fpath, ROOT_DIR) 52*6dbdd20aSAndroid Build Coastguard Worker sys.stderr.write(('Proto file %s has inline comment, please move to ' + 53*6dbdd20aSAndroid Build Coastguard Worker 'the previous line:\t%s') % (rel_path, line)) 54*6dbdd20aSAndroid Build Coastguard Worker errors += 1 55*6dbdd20aSAndroid Build Coastguard Worker 56*6dbdd20aSAndroid Build Coastguard Worker return 0 if errors == 0 else 1 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard Worker 59*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__': 60*6dbdd20aSAndroid Build Coastguard Worker sys.exit(main()) 61