Mercurial > public > mercurial-scm > hg-stable
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 ] |