-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
_shellcheck
415 lines (407 loc) · 27.3 KB
/
_shellcheck
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
#compdef shellcheck
# -----------------------------------------------------------------------------
# The BSD-3-Clause License
#
# Copyright (c) 2018, Koichi Shiraishi
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# * Neither the name of que nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# -----------------------------------------------------------------------------
#
# github.com/koalaman/shellcheck
#
# -----------------------------------------------------------------------------
#
# Usage: shellcheck [OPTIONS...] FILES...
# -a --check-sourced Include warnings from sourced files
# -C[WHEN] --color[=WHEN] Use color (auto, always, never)
# -i CODE1,CODE2.. --include=CODE1,CODE2.. Consider only given types of warnings
# -e CODE1,CODE2.. --exclude=CODE1,CODE2.. Exclude types of warnings
# -f FORMAT --format=FORMAT Output format (checkstyle, diff, gcc, json, json1, quiet, tty)
# --list-optional List checks disabled by default
# --norc Don't look for .shellcheckrc files
# -o check1,check2.. --enable=check1,check2.. List of optional checks to enable (or 'all')
# -P SOURCEPATHS --source-path=SOURCEPATHS Specify path when looking for sourced files ("SCRIPTDIR" for script's dir)
# -s SHELLNAME --shell=SHELLNAME Specify dialect (sh, bash, dash, ksh)
# -S SEVERITY --severity=SEVERITY Minimum severity of errors to consider (error, warning, info, style)
# -V --version Print version information
# -W NUM --wiki-link-count=NUM The number of wiki links to show, when applicable
# -x --external-sources Allow 'source' outside of FILES
# --help Show this usage summary and exit
#
# -----------------------------------------------------------------------------
function _shellcheck() {
local context curcontext=$curcontext state line ret=1
declare -A opt_args
local -a rules
rules=(
"SC1000:\$ is not used specially and should therefore be escaped."
"SC1001:This \`\o\` will be a regular 'o' in this context."
"SC1003:Want to escape a single quote? echo 'This is how it'\\''s done'."
"SC1004:This backslash+linefeed is literal. Break outside single quotes if you just want to break the line."
"SC1007:Remove space after = if trying to assign a value (or for empty string, use var='' ... )."
"SC1009: The mentioned parser error was in ..."
"SC1010:Use semicolon or linefeed before 'done' (or quote to make it literal)."
"SC1011:This apostrophe terminated the single quoted string!"
"SC1012:\`\t\` is just literal \`t\` here. For tab, use \`\"\$\(printf '\t'\)\"\` instead."
"SC1014:Use 'if cmd; then ..' to check exit code, or 'if [ \"\$\(cmd\)\" = .. ]' to check output."
"SC1015:This is a unicode double quote. Delete and retype it."
"SC1016:This is a Unicode single quote. Delete and retype it."
"SC1017:Literal carriage return. Run script through \`tr -d '\r'\` ."
"SC1018:This is a unicode non-breaking space. Delete it and retype as space."
"SC1020:You need a space before the if single then "\]" else "\]\]""
"SC1026:If grouping expressions inside [[..]], use ( .. )."
"SC1028:In [..] you have to escape \\( \\) or preferably combine [..] expressions."
"SC1029:In \`[[..]]\` you shouldn't escape \`(\` or \`)\`."
"SC1035:You need a space here"
"SC1036:\`(\` is invalid here. Did you forget to escape it?"
"SC1037:Braces are required for positionals over 9, e.g. \${10}."
"SC1038:Shells are space sensitive. Use '< <(cmd)', not '<<(cmd)'."
"SC1039:Remove indentation before end token (or use \`<<-\` and indent with tabs)."
"SC1040:When using <<-, you can only indent with tabs."
"SC1041:Found 'eof' further down, but not on a separate line."
"SC1042:"
"SC1044:Couldn't find end token \`EOF' in the here document."
"SC1045:It's not 'foo &; bar', just 'foo & bar'."
"SC1046:Couldn't find 'fi' for this 'if'"
"SC1048:Can't have empty then clauses (use 'true' as a no-op)."
"SC1049:Did you forget the 'then' for this 'if'?"
"SC1051:Semicolons directly after 'then' are not allowed. Just remove it."
"SC1052:Semicolons directly after 'then' are not allowed. Just remove it."
"SC1053:Semicolons directly after 'else' are not allowed. Just remove it."
"SC1054:You need a space after the '{'."
"SC1064:Expected a { to open the function definition."
"SC1065:Trying to declare parameters? Don't. Use () and refer to params as \$1, \$2.."
"SC1066:Don't use \$ on the left side of assignments."
"SC1068:Don't put spaces around the = in assignments."
"SC1069:You need a space before the [."
"SC1071:ShellCheck only supports sh/bash/dash/ksh scripts. Sorry!"
"SC1072:Unexpected .."
"SC1073:Couldn't parse this (thing). Fix to allow more checks."
"SC1075:Use 'elif' instead of 'else if'."
"SC1077:For command expansion, the tick should slant left (\` vs ´)."
"SC1078:Did you forget to close this double quoted string?"
"SC1079:This is actually an end quote, but due to next char it looks suspect."
"SC1081:Scripts are case sensitive. Use 'if', not 'If'."
"SC1082: This file has a UTF-8 BOM. Remove it with: LC_CTYPE=C sed '1s/^...//' < yourscript ."
"SC1083:This \`{\`/\`}\` is literal. Check expression (missing \`;/\n?\`) or quote it."
"SC1084:Use #!, not !#, for the shebang."
"SC1086:Don't use \$ on the iterator name in for loops."
"SC1087:Use braces when expanding arrays, e.g. \${array[idx]} (or \${var}[.. to quiet)."
"SC1088:Parsing stopped here. Invalid use of parentheses?"
"SC1089:Parsing stopped here. Is this keyword correctly matched up?"
"SC1090:Can't follow non-constant source. Use a directive to specify location."
"SC1091:Not following: (error message here)"
"SC1094:Parsing of sourced file failed. Ignoring it."
"SC1095:You need a space or linefeed between the function name and body."
"SC1097:Unexpected ==. For assignment, use =. For comparison, use [/[[."
"SC1098:Quote/escape special characters when using eval, e.g. eval "a=\(b\)"."
"SC1099:You need a space before the #."
"SC1100:This is a unicode dash. Delete and retype as ASCII minus."
"SC1101:Delete trailing spaces after \ to break line (or use quotes for literal space)."
"SC1102:Shells disambiguate \$\(( differently or not at all. If the first \$\( should start command substitution, add a space after it."
"SC1104:Use #!, not just !, for the shebang."
"SC1105:Shells disambiguate (( differently or not at all. If the first ( should start a subshell, add a space after it."
"SC1107:This directive is unknown. It will be ignored."
"SC1108:You need a space before and after the = ."
"SC1109:This is an unquoted HTML entity. Replace with corresponding character."
"SC1110:This is a unicode quote. Delete and retype it (or quote to make literal)."
"SC1111:This is a unicode quote. Delete and retype it (or ignore/singlequote for literal)."
"SC1112:This is a unicode quote. Delete and retype it (or ignore/doublequote for literal)."
"SC1113:Use #!, not just #, for the shebang."
"SC1114:Remove leading spaces before the shebang."
"SC1115:Remove spaces between "
"SC1116:Missing \$ on a \$\((..)) expression? (or use ( ( for arrays)."
"SC1117:Backslash is literal in \`"\n"\`. Prefer explicit escaping: \`"\\n"\`."
"SC1118:Delete whitespace after the here-doc end token."
"SC1119:Add a linefeed between end token and terminating ')'."
"SC1120:No comments allowed after here-doc token. Comment the next line instead."
"SC1121:Add ;/& terminators (and other syntax) on the line with the <<, not here."
"SC1122:Nothing allowed after end token. To continue a command, put it on the line with the \`<<\`."
"SC1123:ShellCheck directives are only valid in front of complete compound commands, like \`if\`, not e.g. individual \`elif\` branches."
"SC1124:ShellCheck directives are only valid in front of complete commands like 'case' statements, not individual case branches."
"SC1126:Place shellcheck directives before commands, not after."
"SC1127:Was this intended as a comment? Use \`#\` in sh."
"SC1128:The shebang must be on the first line. Delete blanks and move comments."
"SC1129:You need a space before the !."
"SC1130:You need a space before the :."
"SC1131:Use \`elif\` to start another branch."
"SC1132:This \`&\` terminates the command. Escape it or add space after \`&\` to silence."
"SC1133:Better diagnostics when starting a line with |/||/&&."
"SC1135:Suggest not ending double quotes just to make $ literal."
"SC2001:SC2001: See if you can use \${variable//search/replace} instead."
"SC2002:Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead."
"SC2003:expr is antiquated. Consider rewriting this using \$\((..)), \${} or \[\[ \]\]."
"SC2004:\$/\${} is unnecessary on arithmetic variables."
"SC2005:Use cmd instead of echo \$(cmd)."
"SC2006:Use \`\$\(...)\` notation instead of legacy backticked \`\` \`...\` \`\`."
"SC2007:Use \$\((..)) instead of deprecated \$[..]"
"SC2008:echo doesn't read from stdin, are you sure you should be piping to it?"
"SC2009:SC2009 Consider using pgrep instead of grepping ps output."
"SC2010:Don't use ls | grep. Use a glob or a for loop with a condition to allow non-alphanumeric filenames."
"SC2012:Use find instead of ls to better handle non-alphanumeric filenames."
"SC2013:To read lines rather than words, pipe/redirect to a 'while read' loop."
"SC2014:This will expand once before find runs, not per file found."
"SC2015:Note that A && B || C is not if-then-else. C may run when A is true."
"SC2016:Expressions don't expand in single quotes, use double quotes for that."
"SC2017:Increase precision by replacing a/b\*c with a\*c/b."
"SC2018:Use '[:lower:]' to support accents and foreign alphabets."
"SC2019:Use '[:upper:]' to support accents and foreign alphabets."
"SC2020:tr replaces sets of chars, not words (mentioned due to duplicates)."
"SC2021:Don't use [] around ranges in tr, it replaces literal square brackets."
"SC2022:Note that unlike globs, o* here matches 'ooo' but not 'oscar'"
"SC2024:\`sudo\` doesn't affect redirects. Use \`..| sudo tee file\`"
"SC2025:Make sure all escape sequences are enclosed in \[..\] to prevent line wrapping issues"
"SC2026:This word is outside of quotes. Did you intend to \`'nest '"'single quotes'"'\` instead'?"
"SC2027:The surrounding quotes actually unquote this. Remove or escape them."
"SC2028:echo won't expand escape sequences. Consider printf."
"SC2029:Note that, unescaped, this expands on the client side."
"SC2030:Modification of var is local (to subshell caused by pipeline)."
"SC2031:var was modified in a subshell. That change might be lost."
"SC2032:Use own script or sh -c '..' to run this from su."
"SC2033:Shell functions can't be passed to external commands."
"SC2034:foo appears unused. Verify it or export it."
"SC2035:Use ./\*glob* or -- \*glob* so names with dashes won't become options."
"SC2036:If you wanted to assign the output of the pipeline, use a=\$\(b | c) ."
"SC2037: To assign the output of a command, use var=\$\(cmd) ."
"SC2038:Use -print0/-0 or find -exec + to allow for non-alphanumeric filenames."
"SC2039:In POSIX sh, *something* is undefined."
"SC2040:#!/bin/sh was specified, so ____ is not supported, even when sh is actually bash."
"SC2041:This is a literal string. To run as a command, use \$\(..) instead of '..' ."
"SC2043:This loop will only ever run once for a constant value. Did you perhaps mean to loop over dir/*, \$var or \$\(cmd)?"
"SC2044:For loops over find output are fragile. Use find -exec or a while read loop."
"SC2045:Iterating over ls output is fragile. Use globs."
"SC2046:Quote this to prevent word splitting"
"SC2048:Use "\$\@" (with quotes) to prevent whitespace problems."
"SC2050:This expression is constant. Did you forget the \`\$\` on a variable?"
"SC2051:Bash doesn't support variables in brace range expansions."
"SC2053:Quote the rhs of = in [[ ]] to prevent glob matching."
"SC2054:Use spaces, not commas, to separate array elements."
"SC2055:You probably wanted && here"
"SC2056:You probably wanted && here"
"SC2057:Unknown binary operator."
"SC2058:Unknown unaryoperator."
"SC2059:Don't use variables in the printf format string. Use printf \"..%s..\" \"\$foo\"."
"SC2060:Quote parameters to tr to prevent glob expansion."
"SC2061:Quote the parameter to -name so the shell won't interpret it."
"SC2062:Quote the grep pattern so the shell won't interpret it."
"SC2063:Grep uses regex, but this looks like a glob."
"SC2064:Use single quotes, otherwise this expands now rather than when signalled."
"SC2065:This is interpreted as a shell file redirection, not a comparison."
"SC2066:Since you double quoted this, it will not word split, and the loop will only run once."
"SC2067:Missing ';' or + terminating -exec. You can't use |/||/&&, and ';' has to be a separate, quoted argument."
"SC2068:Double quote array expansions to avoid re-splitting elements."
"SC2069:To redirect stdout+stderr, 2>&1 must be last (or use '{ cmd > file; } 2>&1' to clarify)."
"SC2070:\`-n\` doesn't work with unquoted arguments. Quote or use \`\`[[ ]]\`\`."
"SC2071:> is for string comparisons. Use -gt instead."
"SC2072:Decimals are not supported. Either use integers only, or use bc or awk to compare."
"SC2074:Can't use \`=~\` in \`[ ]\`. Use \`[[..]]\` instead."
"SC2076:Don't quote rhs of =~, it'll match literally rather than as a regex."
"SC2077:You need spaces around the comparison operator."
"SC2078:This expression is constant. Did you forget a \`\$\` somewhere?"
"SC2081:\`[ .. ]\` can't match globs. Use \`[[ .. ]]\` or grep."
"SC2082:To expand via indirection, use name=\"foo\$n\"; echo \"\${!name}\"."
"SC2084:Remove '\$' or use '_=\$\((expr))' to avoid executing output."
"SC2086:Double quote to prevent globbing and word splitting."
"SC2087:Quote 'EOF' to make here document expansions happen on the server side rather than on the client."
"SC2088:Tilde does not expand in quotes. Use \$HOME."
"SC2089:Quotes/backslashes will be treated literally. Use an array."
"SC2090:Quotes/backslashes in this variable will not be respected."
"SC2091:Remove surrounding \$\() to avoid executing output."
"SC2092:Remove backticks to avoid executing output."
"SC2094:SC2094 Make sure not to read and write the same file in the same pipeline."
"SC2095:Add < /dev/null to prevent ssh from swallowing stdin."
"SC2096:On most OS, shebangs can only specify a single parameter."
"SC2097:This assignment is only seen by the forked process."
"SC2098:This expansion will not see the mentioned assignment."
"SC2099:Use \`\$\((..))\` for arithmetics, e.g. \`i=\$\((i + 2))\`"
"SC2100:Use \`\$\((..))\` for arithmetics, e.g. \`i=\$\((i + 2))\`"
"SC2101:Named class needs outer [], e.g. [[:digit:]\]."
"SC2103:Use a ( subshell ) to avoid having to cd back."
"SC2104:In functions, use return instead of break."
"SC2105:\`break\` is only valid in loops"
"SC2106:SC2106: This only exits the subshell caused by the pipeline."
"SC2107:Instead of [ a && b ], use [ a ] && [ b ]."
"SC2108:In [\[..]], use && instead of -a."
"SC2109:Instead of [ a || b ], use [ a ] || [ b ]."
"SC2110:In [\[..]], use || instead of -o."
"SC2112:'function' keyword is non-standard. Delete it."
"SC2114:Warning: deletes a system directory. "
"SC2115:Use \"\$\{var:?\}\" to ensure this never expands to /* ."
"SC2116:SC2116 Useless echo? Instead of 'cmd \$\(echo foo)', just use 'cmd foo'."
"SC2117:To run commands as another user, use su -c or sudo."
"SC2119:Use foo \"\$@\" if function's \$1 should mean script's \$1."
"SC2120:foo references arguments, but none are ever passed."
"SC2121:To assign a variable, use just 'var=value', no 'set ..'."
"SC2122:>= is not a valid operator. Use '! a < b' instead."
"SC2123:PATH is the shell search path. Use another name."
"SC2124:Assigning an array to a string! Assign as array, or use * instead of @ to concatenate."
"SC2125:Brace expansions and globs are literal in assignments. Quote it or use an array."
"SC2126:Consider using grep -c instead of grep|wc."
"SC2128:Expanding an array without an index only gives the first element."
"SC2129:Consider using { cmd1; cmd2; } >> file instead of individual redirects."
"SC2130:-eq is for integer comparisons. Use = instead."
"SC2139:This expands when defined, not when used. Consider escaping."
"SC2140: Word is on the form \"A\"B\"C\" (B indicated). Did you mean \"ABC\" or \"A\\\"B\\\"C\"?"
"SC2141:Did you mean IFS=\$'\t' ?"
"SC2142:Aliases can't use positional parameters. Use a function."
"SC2143:Use grep -q instead of comparing output with [ -n .. ]."
"SC2144: -e doesn't work with globs. Use a for loop."
"SC2145:Argument mixes string and array. Use * or separate argument."
"SC2146:This action ignores everything before the -o. Use \\( \\) to group."
"SC2147: Literal tilde in PATH works poorly across programs."
"SC2148: Tips depend on target shell and yours is unknown. Add a shebang."
"SC2149:Remove \$/\${} for numeric index, or escape it for string."
"SC2150:-exec does not automatically invoke a shell. Use -exec sh -c .. for that."
"SC2151:Only one integer 0-255 can be returned. Use stdout for other data."
"SC2152:Can only return 0-255. Other data should be written to stdout."
"SC2153:Possible Misspelling: MYVARIABLE may not be assigned, but MY_VARIABLE is."
"SC2154:var is referenced but not assigned."
"SC2155:Declare and assign separately to avoid masking return values."
"SC2156:Injecting filenames is fragile and insecure. Use parameters."
"SC2157:Argument to implicit -n is always true due to literal strings."
"SC2158:[ false ] is true. Remove the brackets"
"SC2159:[ 0 ] is true. Use 'false' instead"
"SC2160:Instead of '[ true ]', just use 'true'."
"SC2161:Instead of '[ 1 ]', use 'true'."
"SC2162:read without -r will mangle backslashes"
"SC2163:This does not export 'FOO'. Remove \$/\${} for that, or use \${var?} to quiet."
"SC2164:Use cd ... || exit in case cd fails."
"SC2165:This nested loop overrides the index variable of its parent."
"SC2166:Prefer [ p ] && [ q ] as [ p -a q ] is not well defined."
"SC2167:This parent loop has its index variable overridden."
"SC2168:'local' is only valid in functions."
"SC2169:In dash, [\[ ]] is not supported."
"SC2170:Numerical -eq does not dereference in [..]. Expand or use string operator."
"SC2172:Trapping signals by number is not well defined. Prefer signal names."
"SC2173:SIGKILL/SIGSTOP can not be trapped."
"SC2174:When used with -p, -m only applies to the deepest directory."
"SC2175:Quote this invalid brace expansion since it should be passed literally to eval"
"SC2176:'time' is undefined for pipelines. time single stage or bash -c instead."
"SC2177:'time' is undefined for compound commands, time sh -c instead."
"SC2178:Variable was used as an array but is now assigned a string."
"SC2179:Use array+=(\"item\") to append items to an array."
"SC2180:Bash does not support multidimensional arrays. Use 1D or associative arrays."
"SC2181ll-inverting-return-value-will-overwrite-it.md:Check exit code directly with e.g. 'if mycmd;', not indirectly with \$?."
"SC2181:Check exit code directly with e.g. 'if mycmd;', not indirectly with \$?."
"SC2182:This printf format string has no variables. Other arguments are ignored."
"SC2183:This format string has 2 variables, but is passed 1 arguments."
"SC2184:Quote arguments to unset so they're not glob expanded."
"SC2185:Some finds don't have a default path. Specify '.' explicitly."
"SC2186:tempfile is deprecated. Use mktemp instead."
"SC2187:Ash scripts will be checked as Dash. Add '"
"SC2188:This redirection doesn't have a command. Move to its command (or use 'true' as no-op)."
"SC2189:You can't have | between this redirection and the command it should apply to."
"SC2190:Elements in associative arrays need index, e.g. array=( [index]=value ) ."
"SC2191:The = here is literal. To assign by index, use ( [index]=value ) with no spaces. To keep as literal, quote it."
"SC2192:This array element has no value. Remove spaces after = or use "" for empty string."
"SC2193:The arguments to this comparison can never be equal. Make sure your syntax is correct."
"SC2194:This word is constant. Did you forget the \$ on a variable?"
"SC2195:This pattern will never match the case statement's word. Double check them."
"SC2196: egrep is non-standard and deprecated. Use grep -E instead."
"SC2197: fgrep is non-standard and deprecated. Use grep -F instead."
"SC2198:Arrays don't work as operands in [ ]. Use a loop (or concatenate with * instead of @)."
"SC2199:Arrays implicitly concatenate in \`[[ ]]\`. Use a loop (or explicit * instead of @)."
"SC2200:Brace expansions don't work as operands in [ ]. Use a loop."
"SC2201:Brace expansion doesn't happen in \`[[ ]]\`. Use a loop."
"SC2202:Globs don't work as operands in [ ]. Use a loop."
"SC2203:Globs are ignored in \`[[ ]]\` except right of =/!=. Use a loop."
"SC2204:(..) is a subshell. Did you mean [ .. ], a test expression?"
"SC2205:(..) is a subshell. Did you mean [ .. ], a test expression?"
"SC2206:Quote to prevent word splitting, or split robustly with mapfile or read -a."
"SC2207:Prefer mapfile or read -a to split command output (or quote to avoid splitting)."
"SC2208:Use \`[[ ]]\` or quote arguments to -v to avoid glob expansion."
"SC2209:Use var=\$\(command) to assign output (or quote to assign string)."
"SC2210:This is a file redirection. Was it supposed to be a comparison or fd operation?"
"SC2211:This is a glob used as a command name. Was it supposed to be in \${..}, array, or is it missing quoting?"
"SC2212:Use 'false' instead of empty [/[[ conditionals."
"SC2213:getopts specified -n, but it's not handled by this 'case'."
"SC2214:This case is not specified by getopts."
"SC2215:This flag is used as a command name. Bad line break or missing \`[ .. ]\`?"
"SC2216:Piping to 'rm', a command that doesn't read stdin. Wrong command or missing xargs?"
"SC2217:Redirecting to 'echo', a command that doesn't read stdin. Bad quoting or missing xargs?"
"SC2218:This function is only defined later. Move the definition up."
"SC2219:Instead of \`let expr\`, prefer \`(( expr ))\` ."
"SC2220:Invalid flags are not handled. Add a \`*)\` case."
"SC2221:This pattern always overrides a later one."
"SC2222:This pattern never matches because of a previous pattern."
"SC2223:This default assignment may cause DoS due to globbing. Quote it."
"SC2224:This mv has no destination. Check the arguments."
"SC2225:This cp has no destination. Check the arguments."
"SC2226:This ln has no destination. Check the arguments, or specify '.' explicitly."
"SC2227:Redirection applies to the find command itself. Rewrite to work per action (or move to end)."
"SC2229:This does not read 'foo'. Remove \$/\${} for that, or use \${var?} to quiet."
"SC2230:which is non-standard. Use builtin 'command -v' instead."
"SC2231:Quote expansions in this for loop glob to prevent wordsplitting, e.g. \"\$dir\"/*.txt ."
"SC2232:Can't use sudo with builtins like cd. Did you want sudo sh -c .. instead?"
"SC2233:Remove superfluous \`(..)\` around condition."
"SC2234:Remove superfluous \`(..)\` around test command."
"SC2235:Use \`{ ..; }\` instead of \`(..)\` to avoid subshell overhead."
"SC2236:Suggest -n/-z instead of ! -z/-n."
"SC2237:Suggest [ -n/-z ] instead of ! [ -z/-n ]."
"SC2238:Warn when redirecting to a known command name, e.g. ls > rm."
"SC2239:Warn if the shebang is not an absolute path, e.g. #!bin/sh."
"SC2240:Warn when passing additional arguments to dot (.) in sh/dash."
"SC2241:Exit status can only ba one integer 0-255."
"SC2242:Can only exit with status 0-255."
"SC2243:Suggest using explicit -n to check for output."
"SC2244:Suggest using explicit -n to check non-empty string."
"SC2245:Warn that Ksh ignores all but the first glob result in [."
"SC2246:Warn if a shebang's interpreter ends with /."
"SC2247:Warn about $\"(cmd)\" and $\"{var}\"."
"SC2248:Warn about unquoted variables without special chars (optional)."
"SC2249:Warn about case with missing default case (optional)."
"SC2250:Warn about variable references without braces (optional)."
"SC2251:Inform about ineffectual ! in front of commands."
"SC2252:Warn about [ \$a != x ] || [ \$a != y ], similar to SC2055."
)
# TODO(zchee): list rules
_arguments -C \
{-a,--check-sourced}'[Include warnings from sourced files]' \
{-C,--color=}'[Use color]:WHEN:(auto always never)' \
{-i,--include=}"[Consider only given types of warnings]:rule code:{_describe 'rule code' rules}" \
{-e,--exclude=}"[Exclude types of warnings]:rule code:{_describe 'rule code' rules}" \
{-f,--format=}'[Output format]:format:(checkstyle diff gcc json json1 quiet tty)' \
'--list-optional[List checks disabled by default]' \
"--norc[Don't look for .shellcheckrc files]" \
{-P,--source-path=}"[Specify path when looking for sourced files]:SCRIPTDIR for script's dir:_dir_list" \
{-o,--enable=}'[List of optional checks to enable]:checks or all:_values -s , "optional checks" "all[enable all optional checks]" "add-default-case[Suggest adding a default case in case statements]" "avoid-nullary-conditions[Suggest explicitly using -n in \[ $var \]]" "check-unassigned-uppercase[Warn when uppercase variables are unassigned]" "quote-safe-variables[Suggest quoting variables without metacharacters]" "require-variable-braces[Suggest putting braces around all variable references]"' \
{-s,--shell=}'[Specify dialect]:shell type:(sh bash dash ksh)' \
{-S,--severity=}'[Minimum severity of errors to consider]:SEVERITY:(error warning info style)' \
{-V,--version}'[Print version information]' \
{-W,--wiki-link-count=}'[The number of wiki links to show, when applicable]:number:' \
{-x,--external-sources}"[Allow 'source' outside of FILES]" \
'--help[Show usage summary and exit]' \
'*:shell file:_files' \
&& ret=0
return ret
}
_shellcheck "$*"
# vim:ft=zsh:et:sts=2:sw=2