diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5630bba --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,309 @@ +## Latest - ??? +### Added +- Statically linked binaries for Linux and Windows (see README.md)! +- `-a` flag to also include warnings in `source`d files +- SC2221/SC2222: Warn about overridden case branches +- SC2220: Warn about unhandled error cases in getopt loops +- SC2218: Warn when using functions before they're defined +- SC2216/SC2217: Warn when piping/redirecting to mv/cp and other non-readers +- SC2215: Warn about commands starting with leading dash +- SC2214: Warn about superfluous getopt flags +- SC2213: Warn about unhandled getopt flags +- SC2212: Suggest `false` over `[ ]` +- SC2211: Warn when using a glob as a command name +- SC2210: Warn when redirecting to an integer, e.g. `foo 1>2` +- SC2206/SC2207: Suggest alternatives when using word splitting in arrays +- SC1117: Warn about double quoted, undefined backslash sequences +- SC1113/SC1114/SC1115: Recognized more malformed shebangs + +### Fixed +- `[ -v foo ]` no longer warns if `foo` is undefined +- SC2037 is now suppressed by quotes, e.g. `PAGER="cat" man foo` +- Ksh nested array declarations now parse correctly +- Parameter Expansion without colons are now recognized, e.g. `${foo+bar}` +- The `lastpipe` option is now respected with regard to subshell warnings +- `\(` is now respected for grouping in `[` +- Leading `\` is now ignored for commands, to allow alias suppression +- Comments are now allowed after directives to e.g. explain 'disable' + + +## v0.4.6 - 2017-03-26 +### Added +- SC2204/SC2205: Warn about `( -z foo )` and `( foo -eq bar )` +- SC2200/SC2201: Warn about brace expansion in [/[[ +- SC2198/SC2199: Warn about arrays in [/[[ +- SC2196/SC2197: Warn about deprected egrep/fgrep +- SC2195: Warn about unmatchable case branches +- SC2194: Warn about constant 'case' statements +- SC2193: Warn about `[[ file.png == *.mp3 ]]` and other unmatchables +- SC2188/SC2189: Warn about redirections without commands +- SC2186: Warn about deprecated `tempfile` +- SC1109: Warn when finding `&`/`>`/`<` unquoted +- SC1108: Warn about missing spaces in `[ var= foo ]` + +### Changed +- All files are now read as UTF-8 with lenient latin1 fallback, ignoring locale +- Unicode quotes are no longer considered syntactic quotes +- `ash` scripts will now be checked as `dash` with a warning + +### Fixed +- `-c` no longer suggested when using `grep -o | wc` +- Comments and whitespace are now allowed before filewide directives +- Here doc delimters with esoteric quoting like `foo""` are now handled +- SC2095 about `ssh` in while read loops is now suppressed when using `-n` +- `%(%Y%M%D)T` now recognized as a single formatter in `printf` checks +- `grep -F` now suppresses regex related suggestions +- Command name checks now recognize busybox applet names + + +## v0.4.5 - 2016-10-21 +### Added +- A Docker build (thanks, kpankonen!) +- SC2185: Suggest explicitly adding path for `find` +- SC2184: Warn about unsetting globs (e.g. `unset foo[1]`) +- SC2183: Warn about `printf` with more formatters than variables +- SC2182: Warn about ignored arguments with `printf` +- SC2181: Suggest using command directly instead of `if [ $? -eq 0 ]` +- SC1106: Warn when using `test` operators in `(( 1 -eq 2 ))` + +### Changed +- Unrecognized directives now causes a warning rather than parse failure. + +### Fixed +- Indices in associative arrays are now parsed correctly +- Missing shebang warning squashed when specifying with a directive +- Ksh multidimensional arrays are now supported +- Variables in substring ${a:x:y} expansions now count as referenced +- SC1102 now also handles ambiguous `$((` +- Using `$(seq ..)` will no longer suggest quoting +- SC2148 (missing shebang) is now suppressed when using shell directives +- `[ a '>' b ]` is now recognized as being correctly escaped + + +## v0.4.4 - 2016-05-15 +### Added +- Haskell Stack support (thanks, Arguggi!) +- SC2179/SC2178: Warn when assigning/appending strings to arrays +- SC1102: Warn about ambiguous `$(((` +- SC1101: Warn when \\ linebreaks have trailing spaces + +### Changed +- Directives directly after the shebang now apply to the entire file + +### Fixed +- `{$i..10}` is now flagged similar to `{1..$i}` + + +## v0.4.3 - 2016-01-13 +### Fixed +- Build now works on GHC 7.6.3 as found on Debian Stable/Ubuntu LTS + + +## v0.4.2 - 2016-01-09 +### Added +- First class support for the `dash` shell +- The `--color` flag similar to ls/grep's (thanks, haguenau!) +- SC2174: Warn about unexpected behavior of `mkdir -pm` (thanks, eatnumber1!) +- SC2172: Warn about non-portable use of signal numbers in `trap` +- SC2171: Warn about `]]` without leading `[[` +- SC2168: Warn about `local` outside functions + +### Fixed +- Warnings about unchecked `cd` will no longer trigger with `set -e` +- `[ a -nt/-ot/-ef b ]` no longer warns about being constant +- Quoted test operators like `[ foo "<" bar ]` now parse +- Escaped quotes in backticks now parse correctly + + +## v0.4.1 - 2015-09-05 +### Fixed +- Added missing files to Cabal, fixing the build + + +## v0.4.0 - 2015-09-05 +### Added +- Support for following `source`d files +- Support for setting default flags in `SHELLCHECK_OPTS` +- An `--external-sources` flag for following arbitrary `source`d files +- A `source` directive to override the filename to `source` +- SC2166: Suggest using `[ p ] && [ q ]` over `[ p -a q ]` +- SC2165: Warn when nested `for` loops use the same variable name +- SC2164: Warn when using `cd` without checking that it succeeds +- SC2163: Warn about `export $var` +- SC2162: Warn when using `read` without `-r` +- SC2157: Warn about `[ "$var " ]` and similar never-empty string matches + +### Fixed +- `cat -vnE file` and similar will no longer flag as UUOC +- Nested trinary operators in `(( ))` now parse correctly +- Ksh `${ ..; }` command expansions now parse + + +## v0.3.8 - 2015-06-20 +### Changed +- ShellCheck's license has changed from AGPLv3 to GPLv3. + +### Added +- SC2156: Warn about injecting filenames in `find -exec sh -c "{}" \;` + +### Fixed +- Variables and command substitutions in brace expansions are now parsed +- ANSI colors are now disabled on Windows +- Empty scripts now parse + + +## v0.3.7 - 2015-04-16 +### Fixed +- Build now works on GHC 7.10 +- Use `regex-tdfa` over `regex-compat` since the latter crashes on OS X. + +## v0.3.6 - 2015-03-28 +### Added +- SC2155: Warn about masked return values in `export foo=$(exit 1)` +- SC2154: Warn when a lowercase variable is referenced but not assigned +- SC2152/SC2151: Warn about bad `return` values like `1234` and `"foo"` +- SC2150: Warn about `find -exec "shell command" \;` + +### Fixed +- `coproc` is now supported +- Trinary operator now recognized in `((..))` + +### Removed +- Zsh support has been removed + + +## v0.3.5 - 2014-11-09 +### Added +- SC2148: Warn when not including a shebang +- SC2147: Warn about literal ~ in PATH +- SC1086: Warn about `$` in for loop variables, e.g. `for $i in ..` +- SC1084: Warn when the shebang uses `!#` instead of `#!` + +### Fixed +- Empty and comment-only backtick expansions now parse +- Variables used in PS1/PROMPT\_COMMAND/trap now count as referenced +- ShellCheck now skips unreadable files and directories +- `-f gcc` on empty files no longer crashes +- Variables in $".." are now considered quoted +- Warnings about expansions in single quotes now include backticks + + +## v0.3.4 - 2014-07-08 +### Added +- SC2146: Warn about precedence when combining `find -o` with actions +- SC2145: Warn when concatenating arrays and strings + +### Fixed +- Case statements now support `;&` and `;;&` +- Indices in array declarations now parse correctly +- `let` expressions now parsed as arithmetic expressions +- Escaping is now respected in here documents + +### Changed +- Completely drop Makefile in favor of Cabal (thanks rodrigosetti!) + + +## v0.3.3 - 2014-05-29 +### Added +- SC2144: Warn when using globs in `[/[[` +- SC2143: Suggesting using `grep -q` over `[ "$(.. | grep)" ]` +- SC2142: Warn when referencing positional parameters in aliases +- SC2141: Warn about suspicious IFS assignments like `IFS="\n"` +- SC2140: Warn about bad embedded quotes like `echo "var="value""` +- SC2130: Warn when using `-eq` on strings +- SC2139: Warn about define time expansions in alias definitions +- SC2129: Suggest command grouping over `a >> log; b >> log; c >> log` +- SC2128: Warn when expanding arrays without an index +- SC2126: Suggest `grep -c` over `grep|wc` +- SC2123: Warn about accidentally overriding `$PATH`, e.g. `PATH=/my/dir` +- SC1083: Warn about literal `{/}` outside of quotes +- SC1082: Warn about UTF-8 BOMs + +### Fixed +- SC2051 no longer triggers for `{1,$n}`, only `{1..$n}` +- Improved detection of single quoted `sed` variables, e.g. `sed '$s///'` +- Stop warning about single quoted variables in `PS1` and similar +- Support for Zsh short form loops, `=(..)` + +### Removed +- SC1000 about unescaped lonely `$`, e.g. `grep "^foo$"` + + +## v0.3.2 - 2014-03-22 +### Added +- SC2121: Warn about trying to `set` variables, e.g. `set var = value` +- SC2120/SC2119: Warn when a function uses `$1..` if none are ever passed +- SC2117: Warn when using `su` in interactive mode, e.g. `su foo; whoami` +- SC2116: Detect useless use of echo, e.g. `for i in $(echo $var)` +- SC2115/SC2114: Detect some catastrophic `rm -r "$empty/"` mistakes +- SC1081: Warn when capitalizing keywords like `While` +- SC1077: Warn when using acute accents instead of backticks + +### Fixed +- Shells are now properly recognized in shebangs containing flags +- Stop warning about math on decimals in ksh/zsh +- Stop warning about decimal comparisons with `=`, e.g. `[ $version = 1.2 ]` +- Parsing of `|&` +- `${a[x]}` not counting as a reference of `x` +- `(( x[0] ))` not counting as a reference of `x` + + +## v0.3.1 - 2014-02-03 +### Added +- The `-s` flag to specify shell dialect +- SC2105/SC2104: Warn about `break/continue` outside loops +- SC1076: Detect invalid `[/[[` arithmetic like `[ 1 + 2 = 3 ]` +- SC1075: Suggest using `elif` over `else if` + +### Fixed +- Don't warn when comma separating elements in brace expansions +- Improved detection of single quoted `sed` variables, e.g. `sed '$d'` +- Parsing of arithmetic for loops using `{..}` instead of `do..done` +- Don't treat the last pipeline stage as a subshell in ksh/zsh + + +## v0.3.0 - 2014-01-19 +### Added +- A man page (thanks Dridi!) +- GCC compatible error reporting (`shellcheck -f gcc`) +- CheckStyle compatible XML error reporting (`shellcheck -f checkstyle`) +- Error codes for each warning, e.g. SC1234 +- Allow disabling warnings with `# shellcheck disable=SC1234` +- Allow disabling warnings with `--exclude` +- SC2103: Suggest using subshells over `cd foo; bar; cd ..` +- SC2102: Warn about duplicates in char ranges, e.g. `[10-15]` +- SC2101: Warn about named classes not inside a char range, e.g. `[:digit:]` +- SC2100/SC2099: Warn about bad math expressions like `i=i+5` +- SC2098/SC2097: Warn about `foo=bar echo $foo` +- SC2095: Warn when using `ssh`/`ffmpeg` in `while read` loops +- Better warnings for missing here doc tokens + +### Fixed +- Don't warn when single quoting variables with `ssh/perl/eval` +- `${!var}` is now counted as a variable reference + +### Removed +- Suggestions about using parameter expansion over basename +- The `jsoncheck` binary. Use `shellcheck -f json` instead. + + +## v0.2.0 - 2013-10-27 +### Added +- Suggest `./*` instead of `*` when passing globs to commands +- Suggest `pgrep` over `ps | grep` +- Warn about unicode quotes +- Warn about assigned but unused variables +- Inform about client side expansion when using `ssh` + +### Fixed +- CLI tool now uses exit codes and stderr canonically +- Parsing of extglobs containing empty patterns +- Parsing of bash style `eval foo=(bar)` +- Parsing of expansions in here documents +- Parsing of function names containing :+- +- Don't warn about `find|xargs` when using `-print0` + + +## v0.1.0 - 2013-07-23 +### Added +- First release