comparison contrib/check-code.py @ 16672:d046eb97d21e

tests: run most check-code sh checks on continued lines too Some false errors are degraded to warnings and whitelisted.
author Mads Kiilerich <mads@kiilerich.com>
date Wed, 25 Apr 2012 01:35:39 +0200
parents 7f76c97361e0
children 775a8d33e6f0
comparison
equal deleted inserted replaced
16671:05b55f5ff8d1 16672:d046eb97d21e
43 43
44 testpats = [ 44 testpats = [
45 [ 45 [
46 (r'pushd|popd', "don't use 'pushd' or 'popd', use 'cd'"), 46 (r'pushd|popd', "don't use 'pushd' or 'popd', use 'cd'"),
47 (r'\W\$?\(\([^\)\n]*\)\)', "don't use (()) or $(()), use 'expr'"), 47 (r'\W\$?\(\([^\)\n]*\)\)', "don't use (()) or $(()), use 'expr'"),
48 (r'^function', "don't use 'function', use old style"),
49 (r'grep.*-q', "don't use 'grep -q', redirect to /dev/null"), 48 (r'grep.*-q', "don't use 'grep -q', redirect to /dev/null"),
50 (r'sed.*-i', "don't use 'sed -i', use a temporary file"), 49 (r'sed.*-i', "don't use 'sed -i', use a temporary file"),
51 (r'echo.*\\n', "don't use 'echo \\n', use printf"), 50 (r'echo.*\\n', "don't use 'echo \\n', use printf"),
52 (r'echo -n', "don't use 'echo -n', use printf"), 51 (r'echo -n', "don't use 'echo -n', use printf"),
53 (r'^diff.*-\w*N', "don't use 'diff -N'"),
54 (r'(^| )wc[^|]*$\n(?!.*\(re\))', "filter wc output"), 52 (r'(^| )wc[^|]*$\n(?!.*\(re\))', "filter wc output"),
55 (r'head -c', "don't use 'head -c', use 'dd'"), 53 (r'head -c', "don't use 'head -c', use 'dd'"),
56 (r'sha1sum', "don't use sha1sum, use $TESTDIR/md5sum.py"), 54 (r'sha1sum', "don't use sha1sum, use $TESTDIR/md5sum.py"),
57 (r'ls.*-\w*R', "don't use 'ls -R', use 'find'"), 55 (r'ls.*-\w*R', "don't use 'ls -R', use 'find'"),
58 (r'printf.*\\([1-9]|0\d)', "don't use 'printf \NNN', use Python"), 56 (r'printf.*\\([1-9]|0\d)', "don't use 'printf \NNN', use Python"),
60 (r'\$\(.*\)', "don't use $(expr), use `expr`"), 58 (r'\$\(.*\)', "don't use $(expr), use `expr`"),
61 (r'rm -rf \*', "don't use naked rm -rf, target a directory"), 59 (r'rm -rf \*', "don't use naked rm -rf, target a directory"),
62 (r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w', 60 (r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w',
63 "use egrep for extended grep syntax"), 61 "use egrep for extended grep syntax"),
64 (r'/bin/', "don't use explicit paths for tools"), 62 (r'/bin/', "don't use explicit paths for tools"),
65 (r'\$PWD', "don't use $PWD, use `pwd`"),
66 (r'[^\n]\Z', "no trailing newline"), 63 (r'[^\n]\Z', "no trailing newline"),
67 (r'export.*=', "don't export and assign at once"), 64 (r'export.*=', "don't export and assign at once"),
68 (r'^([^"\'\n]|("[^"\n]*")|(\'[^\'\n]*\'))*\^', "^ must be quoted"),
69 (r'^source\b', "don't use 'source', use '.'"), 65 (r'^source\b', "don't use 'source', use '.'"),
70 (r'touch -d', "don't use 'touch -d', use 'touch -t' instead"), 66 (r'touch -d', "don't use 'touch -d', use 'touch -t' instead"),
71 (r'ls +[^|\n-]+ +-', "options to 'ls' must come before filenames"), 67 (r'ls +[^|\n-]+ +-', "options to 'ls' must come before filenames"),
72 (r'[^>\n]>\s*\$HGRCPATH', "don't overwrite $HGRCPATH, append to it"), 68 (r'[^>\n]>\s*\$HGRCPATH', "don't overwrite $HGRCPATH, append to it"),
73 (r'^stop\(\)', "don't use 'stop' as a shell function name"), 69 (r'^stop\(\)', "don't use 'stop' as a shell function name"),
77 (r'/dev/u?random', "don't use entropy, use /dev/zero"), 73 (r'/dev/u?random', "don't use entropy, use /dev/zero"),
78 (r'do\s*true;\s*done', "don't use true as loop body, use sleep 0"), 74 (r'do\s*true;\s*done', "don't use true as loop body, use sleep 0"),
79 (r'^( *)\t', "don't use tabs to indent"), 75 (r'^( *)\t', "don't use tabs to indent"),
80 ], 76 ],
81 # warnings 77 # warnings
82 [] 78 [
79 (r'^function', "don't use 'function', use old style"),
80 (r'^diff.*-\w*N', "don't use 'diff -N'"),
81 (r'\$PWD', "don't use $PWD, use `pwd`"),
82 (r'^([^"\'\n]|("[^"\n]*")|(\'[^\'\n]*\'))*\^', "^ must be quoted"),
83 ]
83 ] 84 ]
84 85
85 testfilters = [ 86 testfilters = [
86 (r"( *)(#([^\n]*\S)?)", repcomment), 87 (r"( *)(#([^\n]*\S)?)", repcomment),
87 (r"<<(\S+)((.|\n)*?\n\1)", rephere), 88 (r"<<(\S+)((.|\n)*?\n\1)", rephere),
104 ] 105 ]
105 106
106 for i in [0, 1]: 107 for i in [0, 1]:
107 for p, m in testpats[i]: 108 for p, m in testpats[i]:
108 if p.startswith(r'^'): 109 if p.startswith(r'^'):
109 p = r"^ \$ (%s)" % p[1:] 110 p = r"^ [$>] (%s)" % p[1:]
110 else: 111 else:
111 p = r"^ \$ .*(%s)" % p 112 p = r"^ [$>] .*(%s)" % p
112 utestpats[i].append((p, m)) 113 utestpats[i].append((p, m))
113 114
114 utestfilters = [ 115 utestfilters = [
115 (r"( *)(#([^\n]*\S)?)", repcomment), 116 (r"( *)(#([^\n]*\S)?)", repcomment),
116 ] 117 ]