31 t = re.sub(r"\S", "x", m.group(2)) |
31 t = re.sub(r"\S", "x", m.group(2)) |
32 return m.group(1) + t |
32 return m.group(1) + t |
33 |
33 |
34 |
34 |
35 testpats = [ |
35 testpats = [ |
36 (r'(pushd|popd)', "don't use pushd|popd, use cd"), |
36 (r'(pushd|popd)', "don't use 'pushd' or 'popd', use 'cd'"), |
37 (r'\W\$?\(\([^\)]*\)\)', "don't use (()) or $(()), use expr"), |
37 (r'\W\$?\(\([^\)]*\)\)', "don't use (()) or $(()), use 'expr'"), |
38 (r'^function', "don't use 'function', use old style"), |
38 (r'^function', "don't use 'function', use old style"), |
39 (r'grep.*-q', "don't use grep -q, redirect to /dev/null"), |
39 (r'grep.*-q', "don't use 'grep -q', redirect to /dev/null"), |
40 (r'echo.*\\n', "don't use 'echo \\n', use printf"), |
40 (r'echo.*\\n', "don't use 'echo \\n', use printf"), |
41 (r'^diff.*-\w*N', "don't use diff -N"), |
41 (r'^diff.*-\w*N', "don't use 'diff -N'"), |
42 (r'(^| )wc[^|]*$', "filter wc output"), |
42 (r'(^| )wc[^|]*$', "filter wc output"), |
43 (r'head -c', "don't use head -c, use dd"), |
43 (r'head -c', "don't use 'head -c', use 'dd'"), |
44 (r'ls.*-\w*R', "don't use ls -R, use find"), |
44 (r'ls.*-\w*R', "don't use 'ls -R', use 'find'"), |
45 (r'printf.*\\\d\d\d', "don't use printf \NNN, use python"), |
45 (r'printf.*\\\d\d\d', "don't use 'printf \NNN', use Python"), |
46 (r'printf.*\\x', "don't use printf \\x, use python"), |
46 (r'printf.*\\x', "don't use printf \\x, use Python"), |
47 (r'\$\(.*\)', "don't use $(expr), use `expr`"), |
47 (r'\$\(.*\)', "don't use $(expr), use `expr`"), |
48 (r'rm -rf \*', "don't use naked rm -rf, target a directory"), |
48 (r'rm -rf \*', "don't use naked rm -rf, target a directory"), |
49 (r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w', |
49 (r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w', |
50 "use egrep for extended grep syntax"), |
50 "use egrep for extended grep syntax"), |
51 (r'/bin/', "don't use explicit paths for tools"), |
51 (r'/bin/', "don't use explicit paths for tools"), |