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 ] |