|
|
#!/usr/bin/env python
|
|
|
"""Utility to look for hard tabs and \r characters in all sources.
|
|
|
|
|
|
Usage:
|
|
|
|
|
|
./check_sources.py
|
|
|
|
|
|
It prints summaries and if chosen, line-by-line info of where \\t or \\r
|
|
|
characters can be found in our source tree.
|
|
|
"""
|
|
|
from __future__ import print_function
|
|
|
|
|
|
# Config
|
|
|
# If true, all lines that have tabs are printed, with line number
|
|
|
full_report_tabs = True
|
|
|
# If true, all lines that have tabs are printed, with line number
|
|
|
full_report_rets = False
|
|
|
|
|
|
# Code begins
|
|
|
from IPython.external.path import path
|
|
|
|
|
|
rets = []
|
|
|
tabs = []
|
|
|
|
|
|
for f in path('..').walkfiles('*.py'):
|
|
|
errs = ''
|
|
|
cont = f.bytes()
|
|
|
if '\t' in cont:
|
|
|
errs+='t'
|
|
|
tabs.append(f)
|
|
|
|
|
|
if '\r' in cont:
|
|
|
errs+='r'
|
|
|
rets.append(f)
|
|
|
|
|
|
if errs:
|
|
|
print("%3s" % errs, f)
|
|
|
|
|
|
if 't' in errs and full_report_tabs:
|
|
|
for ln,line in enumerate(f.lines()):
|
|
|
if '\t' in line:
|
|
|
print('TAB:',ln,':',line, end=' ')
|
|
|
|
|
|
if 'r' in errs and full_report_rets:
|
|
|
for ln,line in enumerate(open(f.abspath(),'rb')):
|
|
|
if '\r' in line:
|
|
|
print('RET:',ln,':',line, end=' ')
|
|
|
|
|
|
# Summary at the end, to call cleanup tools if necessary
|
|
|
if tabs:
|
|
|
print('Hard tabs found. These can be cleaned with untabify:')
|
|
|
for f in tabs: print(f, end=' ')
|
|
|
if rets:
|
|
|
print('Carriage returns (\\r) found in:')
|
|
|
for f in rets: print(f, end=' ')
|
|
|
|