Commit Graph

688 Commits

Author SHA1 Message Date
Vidar Holen 561075ea79 Merge branch 'shflags' of https://github.com/yetamrra/shellcheck into yetamrra-shflags 2019-07-01 20:00:28 -07:00
Vidar Holen 9702f1ff9c Handle diffs for files without trailing linefeed 2019-06-30 20:19:10 -07:00
Vidar Holen 544047c5af Warn about ending double quotes just to make $ literal 2019-06-30 18:43:42 -07:00
Vidar Holen 321afa427e Remove unused parse-time AST warnings 2019-06-30 17:38:17 -07:00
Vidar Holen c381c5746f Remove unnecessary lookahead in readDollarLonely 2019-06-30 17:28:15 -07:00
Vidar Holen eeb7ea01c9 Allow SC2103 to be silenced (fixes #1591) 2019-06-30 16:36:45 -07:00
Vidar Holen 3116ed3ae5 Filter warnings by annotations in unit tests 2019-06-30 16:36:03 -07:00
Benjamin Gordon f6ba500d6b Add support for basic shflags semantics
The shflags command-line flags library creates variables at runtime
with a few well-defined functions.  This causes shellcheck to spit out
lots of warnings about unassigned variables, as well as miss warnings
about unused flag variables.

We can address this with two parts:

1. Pretend that the shflags global variables are predefined like other
   shell variables so that shellcheck doesn't expect users to set them.
2. Treat DEFINE_string, DEFINE_int, etc. as new commands that create
   variables, similar to the existing read, local, mapfile, etc.

Part 1 can theoretically be addresssed without this by following sourced
files, but that doesn't help if people are otherwise not following
external sources.

The new behavior is on by default, similar to automatic bats test
behavior.

Addresses #1597
2019-06-25 12:14:54 -06:00
Vidar Holen c5aa171a5f Use mappend over <> for compatibility 2019-06-24 09:02:35 -07:00
Vidar Holen b1aeee564c Add a Diff output format 2019-06-23 20:02:01 -07:00
Vidar Holen e099625e7d Remove unused ioref 2019-06-23 15:50:48 -07:00
Vidar Holen 5242e384a1 Fix error spans for shebang warnings (fixes #1620) 2019-06-23 13:49:08 -07:00
Vidar Holen 7e77bfae49 Improve message for SC2055 2019-06-23 13:48:43 -07:00
Vidar Holen 9059024de6
Merge pull request #1592 from hugopeixoto/fix/SC2016-false-positive
SC2016: Don't trigger when using empty backticks
2019-06-19 19:55:34 -07:00
Vidar Holen 61d2112e71 Add missing JSON1.hs 2019-06-02 13:00:38 -07:00
Vidar Holen 9f0ef5983a Optionally check for unassigned uppercase variables 2019-06-02 10:29:04 -07:00
Vidar Holen 1297ef46d7 Add JSON1 as a separate format, wrap result in an object 2019-06-02 10:28:37 -07:00
Vidar Holen f4be53eb19 Warn about [ -v var ] for POSIX sh 2019-06-02 10:28:20 -07:00
Vidar Holen 3e7c2bfec0 Warn about [ $a != x ] || [ $a != y ] 2019-06-02 09:26:54 -07:00
Hugo Peixoto 07ffcb626e SC2016: Don't trigger when using empty backticks
When using '``' or '```', it should not suggest using double quotes.
2019-05-27 11:03:24 +01:00
Vidar Holen 95b1185882 Inform about ineffectual ! on commands (fixes #1531) 2019-05-22 17:14:28 -07:00
Vidar Holen 8efbecd64a Don't suggest removing braces from $((${x+1})) (fixes #1533) 2019-05-19 15:29:47 -07:00
Vidar Holen 52a9d90e1a
Merge pull request #1580 from virgilwashere/copyright
Update Copyright to year 2019; README linting
2019-05-19 12:03:15 -07:00
Vidar Holen 861b63aa77 Specify 'variable' in require-braces 2019-05-14 18:48:41 -07:00
Benjamin Gordon 64c9c83cc8 SC2250: New optional check for braces around variable references
Always using braces makes it harder to accidentally change a variable by
pasting other text next to it, but the warning is off by default because
it's definitely a style preference.  Omit special and positional
variables from the check because appending additional characters to them
already doesn't change parsing.
2019-05-14 11:01:38 -06:00
Benjamin Gordon aa3b709b5d Track whether braces were present in T_DollarBraced
References of the form $var and ${var} both map to the same structure in
the AST, which prevents any later analysis functions from distinguishing
them.  In preparation for adding checks that need this info, add a Bool
to T_DollarBraced that tracks whether the braces were seen at parsing
time and update all references so that this change is a no-op.
2019-05-14 11:01:38 -06:00
Benjamin Gordon 0358090b3c Refactor definition of special variables.
This ensures that the parser and other places that refer to special
variables can use the same list.
2019-05-14 08:57:56 -06:00
Virgil ea05271fa3 📝 Update Copyright to year 2019 and Markdown linting
- [x] 📝 Update Copyright to year 2019

- [x] 📝 MD009/no-trailing-spaces: Trailing spaces [Expected: 0 or 2; Actual: 1]
- [x] 📝 MD034/no-bare-urls: Bare URL used

- [ ] 📝 ~MD004/ul-style: Unordered list style [Expected: dash; Actual: asterisk]~
- [ ] ~add missing TOC entries~
2019-05-14 20:12:34 +10:00
Vidar Holen 50116e8aee Don't suggest [[..]] for sh in SC2081 (fixes #1562) 2019-05-13 20:45:53 -07:00
Benjamin Gordon 50af8aba29 Add json1 format that ignores tabs
The new json1 format works just like json except that it treats tabs as
single characters instead of 8-character tabstops.

The main use case is to allow editors to pass -fjson1 so that they can
consume the json output in a character-oriented way without breaking
backwards compatibility.

Also addresses #1048.
2019-05-13 10:55:16 -06:00
Vidar Holen 5fb1da6814 Replace verbose checks with optional checks 2019-05-12 19:14:04 -07:00
Vidar Holen 58205a3573 Emit resolved rather than apparent filename for 'source' (fixes #1579) 2019-05-12 15:55:37 -07:00
Vidar Holen d9e419d60f Add support for source-path directives (fixes #1577) 2019-05-09 19:54:41 -07:00
Vidar Holen a3cd5979a2 Update message for SC2171 2019-05-04 12:54:59 -07:00
Vidar Holen 37b24cc129 Don't warn about "a"b"c" in =~ regex (fixes #1565) 2019-05-04 12:18:45 -07:00
Vidar Holen e2e65e1350 Warn about arithmetic base conversation in sh (fixes #1547) 2019-04-29 18:02:44 -07:00
Vidar Holen 9470b9dc31 Don't mention arrays in SC2089 in sh/dash (fixes #1014) 2019-04-27 16:22:01 -07:00
Vidar Holen bf1003eae3 Auto-disable SC2119 when disabling SC2120 (fixes #703) 2019-04-27 15:20:07 -07:00
Vidar Holen c6c12f52bd Expand root paths into source paths 2019-04-24 18:51:24 -07:00
Pontus Andersson af46758ff1 Add option to look for sources in alternate root paths
Add a new optional flag "-r|--root ROOTPATHS", where ROOTPATHS is a
colon separated list of paths, that will look for external sources in
alternate roots.

This is particular useful when the run-time environment does not fully
match the development environment. The #shellcheck source=file directive
is useful, but has its limitations in certain scenarios. Also, in many
cases the directive could be removed from scripts when the root flag is
used.

Script example.bash:
  #!/bin/bash
  source /etc/foo/config

Example usage where etc/foo/config exists in skel/foo:
  # shellcheck -x -r skel/foo:skel/core example.bash
2019-04-22 17:54:42 +02:00
Vidar Holen b824294961 Limit SC2032 to likely command args (fixes #1537) 2019-04-14 20:58:01 -07:00
Vidar Holen 5b7354918f SC2249: When verbose, warn about missing default case (fixes #997) 2019-04-14 16:58:17 -07:00
Vidar Holen b76c0a8221 SC2248: Warn about unquoted variables without special chars 2019-04-13 20:19:13 -07:00
Vidar Holen c860b74505 Set SC2243/SC2244 level to "verbose" 2019-04-13 13:40:18 -07:00
Vidar Holen 9652ccfdbd Add a verbose mode: `-S verbose` 2019-04-13 13:16:41 -07:00
Vidar Holen f514f5f735 Warn about flipped $ and " in $"(cmd)" (fixes #1517) 2019-03-20 22:10:04 -07:00
Vidar Holen c53c8a5ead Allow using 'source -- file' (fixes #1518) 2019-03-17 19:37:35 -07:00
Vidar Holen 581bcc3907 Add support for `.shellcheckrc` files 2019-03-03 18:57:13 -08:00
Vidar Holen 293c3b27b8 Continue on parse errors in backticks (fixes #1475) 2019-03-03 13:37:32 -08:00
Vidar Holen 05e657e130
Merge pull request #1499 from jabberabbe/iss896-printf-v-arrays
Fix issues #896 and #433: printf -v and arrays
2019-03-02 12:05:50 -08:00
Tito Sacchi bd19ab4fa9 Fix issues #896 and #433: printf -v and arrays 2019-02-24 09:45:31 +01:00
Cristian Adrián Ontivero d3f6e045e2 Check wait flags in dash & POSIX sh
Flags for the wait builtin are undefined under both POSIX sh and dash.
Bash though, accepts [-fn].
2019-02-10 12:44:22 +01:00
Vidar Holen d984f8cbe7 Don't look at 'set' options after a non-literal. 2019-02-08 22:36:22 -08:00
Cristian Adrián Ontivero acef53be9c Check set flags under dash & POSIX sh (fixes #990)
The set builtin accepts certain flags, and some longer synonyms (for
instance set -e is the same as set -o errexit) under POSIX sh. This
makes ShellCheck warn if any of the used flags and options are
undefined when targeting POSIX sh.

This fixes #990, while adding general flag-support checking for set in
the process.
2019-02-03 17:27:36 +01:00
Vidar Holen 2ea2293154 Update SC1008 to suggest using directive. 2019-01-27 15:02:15 -08:00
Cristian Adrián Ontivero a669e1684b
Check hash flags under dash and POSIX sh
Flags for the hash builtin other than [-r] are undefined under POSIX sh.
Dash also accepts [-v], while bash adds [-l] [-p filename] [-dt] aside
from [-r].
2019-01-27 08:22:37 +01:00
Vidar Holen 420d913bbf Merge branch 'issue_1330_unsupported_echo_flags' of https://github.com/Gandalf-/shellcheck 2019-01-26 20:16:34 -08:00
Vidar Holen fb7ac3f57e
Merge pull request #1474 from contivero/unset-flags
Check unset flags under dash and POSIX sh
2019-01-26 20:11:03 -08:00
Gandalf- 112a7d8b9b Issue 1330 unsupported echo flags
Issue https://github.com/koalaman/shellcheck/issues/1330

Addresses false positives when quoted arguments to echo begin with what
looks like a flag. Now, warn only when the first argument is a
recognized echo flag when flags are unsupported.
2019-01-24 19:00:19 -08:00
Cristian Adrián Ontivero 31c5601c5e
Check unset flags under dash and POSIX sh
The only acceptable flags for the unset builtin under POSIX sh and dash
are [-fv]. Bash though, accepts [-n] too. This commits makes shellcheck
warn about this.
2019-01-23 06:35:08 +01:00
Vidar Holen 2737496b3a Fix grammatical error in comments 2019-01-22 19:47:40 -08:00
Vidar Holen a404efab65 Merge branch 'issue_837_opposite_of_exclude_option' of https://github.com/Gandalf-/shellcheck 2019-01-22 19:39:55 -08:00
Vidar Holen 3c94d8b3eb Merge branch 'issue_1393_quiet_flag' of https://github.com/Gandalf-/shellcheck 2019-01-22 19:15:28 -08:00
Gandalf- a89403f09b Issue 1393 quiet flag
Issue https://github.com/koalaman/shellcheck/issues/1393

Provide '-q' and '--quiet' flags that suppress all normal output, but keep the
return status, similar to 'grep -q'.
2019-01-21 18:25:41 -08:00
Vidar Holen d4d219affd Don't warn that `cd ../..` and similar can fail in SC2164 2019-01-21 16:55:01 -08:00
Vidar Holen 489c3a4ddf Fix SC2164 always saying 'cd' even when using 'pushd' 2019-01-21 16:55:01 -08:00
Cristian Adrián Ontivero 63a259e5be
Check type flags under dash and POSIX sh (fixes #1471)
There are no flags for the type builtin defined under POSIX sh, nor does
dash define any. Bash, however, allows [-aftpP]. We check this now under
POSIX and dash.
2019-01-21 19:49:14 +01:00
Gandalf- 59c47f2266 Issue 837 flag to include only certain warnings
Issue https://github.com/koalaman/shellcheck/issues/837

Add an --include option, which creates a whitelist of warnings to report
on, the opposite of --exclude.
2019-01-20 16:42:27 -08:00
Vidar Holen a621eba6d3
Merge pull request #1456 from contivero/issue-667
Silence SC2103 when using 'set -e' (fixes #667)
2019-01-20 14:54:29 -08:00
Vidar Holen 978bfdd5da
Merge pull request #1462 from contivero/trap-flags
Check trap flags under dash & POSIX sh (fixes #1461)
2019-01-20 14:48:01 -08:00
Vidar Holen a03d94c0b2
Merge pull request #1468 from Gandalf-/issue_824_grep_fixed_strings
Issue 824 grep fixed strings and SC2063
2019-01-20 14:06:40 -08:00
Vidar Holen e1fe9be7af Fix minor details in new Bats support 2019-01-20 14:02:42 -08:00
Vidar Holen c97cb8cf54 Merge branch 'bats-support' of https://github.com/damienrg/shellcheck 2019-01-20 13:35:12 -08:00
Vidar Holen a504ca6b57 Add some unit tests for extension detection 2019-01-20 13:24:31 -08:00
Vidar Holen 437f73c001 Merge branch 'iss1369-shell-from-file-extension' of https://github.com/jabberabbe/shellcheck 2019-01-20 12:50:06 -08:00
Vidar Holen f187382a0c Add bats support
This is motivated by the fact that the popularity of bats is increasing
since the creation of bats-core/bats-core.

The code is a cherry-pick of koalaman/shellcheck/bats branch.

Fix koalaman/shellcheck#417.
2019-01-20 14:59:37 +01:00
Gandalf- 661be056f1 Issue 824 grep fixed strings and SC2063
Issue https://github.com/koalaman/shellcheck/issues/824

Fix up to original change to include '--fixed-strings' in the grep +
regex special cases.
2019-01-19 08:49:26 -08:00
Tito Sacchi 9f45dc4c8b Not determine the shell from `.sh` extension
See discussion on issue #1369 for details.
2019-01-18 09:21:07 +01:00
Cristian Adrián Ontivero 8e31e86cc4
Check trap flags under dash & POSIX sh (fixes #1461) 2019-01-16 08:44:41 +01:00
Vidar Holen c6c615217b Allow specifying that flags should not be checked for support.
This was motivated by the fact that `-a` was missing from Dash's
long list.
2019-01-15 19:50:23 -08:00
Cristian Adrián Ontivero 3107a1bae0
Check umask flags under dash & POSIX sh (fixes #1459) 2019-01-15 08:24:23 +01:00
Tito Sacchi 1e6a30905a Make ShellCheck not emit warnings about the shebang if the shell
type is determined from the extension
2019-01-14 14:32:25 +01:00
Tito Sacchi a4b9cec9f0 Fix #1369 (Use file extension to detect shell)
The precedence order that is used to determine the shell
is the following:
1. ShellCheck directive
2. Shebang
3. File extension
A new field `asFallbackShell` has been
added to the record type `AnalysisSpec`.
2019-01-14 14:32:25 +01:00
Cristian Adrián Ontivero c3a56659f4
Check cd flags under dash & POSIX sh (fixes #1457) 2019-01-14 08:18:17 +01:00
Vidar Holen e0a4241baa Warn if a shebang's interpreter ends in / (fixes #373) 2019-01-13 17:32:25 -08:00
Vidar Holen 1835ebd3a0 SC2245: Warn that Ksh [ -f * ] only applies to first (Fixes #1452) 2019-01-13 16:41:08 -08:00
Cristian Adrián Ontivero b34f4c1f4b
Silence SC2103 when using 'set -e' (fixes #667) 2019-01-13 16:20:41 +01:00
Cristian Adrián Ontivero 3760e7945f
Check readonly flags in dash/POSIX sh (fixes #1448) 2019-01-10 11:05:37 +01:00
Vidar Holen fcdd6055df Add new replacement format to the JSON 2019-01-09 18:35:36 -08:00
Vidar Holen fd2beaadfa Make Fixer responsible for realigning tab stops 2019-01-09 18:08:59 -08:00
Vidar Holen df7f00eaed Remove duplicate `pathTo` and unused `replaceMultiLines` 2019-01-09 17:51:43 -08:00
Vidar Holen e45b679d58
Merge pull request #1445 from Gandalf-/issue_1318_single_comma_array
Issue 1318 single comma array delimiter
2019-01-09 17:42:35 -08:00
Gandalf- 263401cfcb Issue 1318 single comma array delimiter
Issue https://github.com/koalaman/shellcheck/issues/1318

The case in which a single comma, with no spaces, used in an array
assignment is now caught for SC2054.
2019-01-08 19:56:34 -08:00
Vidar Holen 0e21f91c07
Merge pull request #1433 from contivero/fix-export-p
Fix 'export -p' being undefined under POSIX sh
2019-01-08 19:33:03 -08:00
Vidar Holen 4ecdc10599 Merge branch 'shellcheck_sed_herestring_130' of https://github.com/Gandalf-/shellcheck 2019-01-08 19:19:44 -08:00
Vidar Holen baa4d2e555 Let checkGrepRe only parse flags once 2019-01-08 19:06:00 -08:00
Vidar Holen 26c55750cf Merge branch 'issue_1404_grep_globs' of https://github.com/Gandalf-/shellcheck 2019-01-08 18:53:51 -08:00
Vidar Holen 9c42d43e90 Merge branch 'sc2093-exec-in-loops' of https://github.com/jabberabbe/shellcheck 2019-01-08 18:31:59 -08:00
Vidar Holen 434b904746 Process replacements according to AST depth (fixes #1431) 2019-01-08 18:25:37 -08:00
Tito Sacchi ab2b0e11a3 Fix #1340 (SC2093 about removing "exec" should trigger in loops) 2019-01-08 20:20:26 +01:00
Gandalf- 4a2b2c7396 Issue 1404 grep glob false positives
https://github.com/koalaman/shellcheck/issues/1404

Some grep flags support globs; these are now all checked prevent false
positives.
2019-01-06 17:45:29 -08:00
Vidar Holen 98266a1878 Merge branch 'issue_1039_case_pattern_context' of https://github.com/Gandalf-/shellcheck 2019-01-01 16:50:59 -08:00
Vidar Holen 6138206ce5 Merge branch 'autofix-tab' of https://github.com/ngzhian/shellcheck 2019-01-01 13:06:20 -08:00
Gandalf- 6debd59f02 Add context to case pattern warnings
https://github.com/koalaman/shellcheck/issues/1039
2018-12-31 18:52:30 -08:00
Gandalf- 9425654a42 Expand echo + sed style warning to herestrings
https://github.com/koalaman/shellcheck/issues/130
2018-12-31 15:33:37 -08:00
Ng Zhi An 461be74976 Realign virtual tabs when applying fix
Fix an off-by-one error, in the case that is commented `should never happen`.
It happens when the end of a range is the at the end of a line.
In that case we should update the real column count (probably just by +1)
instead of returning it.

I modified makeNonVirtual to use a helper, realign, that works on
Ranged. That way we can share the code to realign a PositionedComment
and also a Replacement.

Fixes #1420
2018-12-29 17:16:29 +08:00
Vidar Holen 73822c3588 Allow SC2243 and SC2244 to trigger with quotes, add fix 2018-12-28 19:02:06 -08:00
Cristian Adrián Ontivero 29dedbdc9c
Fix 'export -p' being undefined under POSIX sh
Fixes #1432
2018-12-28 21:23:49 -03:00
Vidar Holen f6bc009331 Merge branch '1416-encourage-n' of https://github.com/ngzhian/shellcheck into ngzhian-1416-encourage-n 2018-12-28 15:56:15 -08:00
Cristian Adrián Ontivero 73a41cdd2f
Check jobs flags in dash/POSIX sh (fixes #1429) 2018-12-28 10:04:19 -03:00
Vidar Holen 1b4c486748
Merge pull request #1426 from ngzhian/dash-1406
Update supported ulimit flags for dash
2018-12-27 12:19:30 -08:00
Ng Zhi An 95a8cf93c9 Add check for ambiguous nullary test
Given an input like `if [[ $(a) ]]; then ...`, this is a implicit `-n` test,
so it works like `if [[ -n $(a) ]]; then ...`. Users might confuse this for
a check for the exit code of the command a, which should be tested with:

    if a; then
        ...

We warn the user to be more explicity and specifity the `-n`.

Fixes #1416
2018-12-25 17:14:21 +08:00
Ng Zhi An bd04af0769 Update supported ulimit flags for dash
Values are retrieved from https://linux.die.net/man/1/dash, search for
ulimit.

Fixes #1406
2018-12-25 09:33:58 +08:00
Vidar Holen 9acc8fcb53 Fix semigroup incompatibility 2018-12-23 11:08:48 -08:00
Vidar Holen 897f019353 Move Ranged definition to Fixer to avoid overpromising 2018-12-22 10:04:00 -08:00
Ng Zhi An 0636e7023c Fix applying multiple fixes per line
Fixes #1421
2018-12-21 14:34:03 +08:00
Vidar Holen 08ca1ee6e9 Remove unnecessary Regex constraint 2018-12-17 20:15:39 -08:00
Vidar Holen ecd61bfc68
Merge pull request #1376 from ngzhian/autofix
Add method to apply a multi-line replacement
2018-12-17 17:24:59 -08:00
Ng Zhi An a8d88dfe98 Fix calculation of changed lines 2018-12-17 00:20:50 -08:00
Ng Zhi An 7d2c519d64 Remove spurious new line in fix message 2018-12-17 00:20:50 -08:00
Ng Zhi An 3403f8d75b Fix bug in overlap check 2018-12-17 00:20:50 -08:00
Ng Zhi An 408a3b99d8 Remove overlaps before applying replacements 2018-12-17 00:20:50 -08:00
Ng Zhi An bc111141f8 Move fix application logic to separate module 2018-12-17 00:20:50 -08:00
Ng Zhi An 3471ad45b1 Smarter sorting and application of fix to handle multiple replacements 2018-12-17 00:20:50 -08:00
Ng Zhi An d5ba41035b Add method to apply a multi-line replacement 2018-12-16 21:53:48 -08:00
Vidar Holen 88aef838f1 SC1068 (var = x) now alternatively suggests quoting (fixes #1412) 2018-12-16 15:45:52 -08:00
Vidar Holen 138080bdc7 Fix infinite loop on annotations for SC2188 (fixes #1413) 2018-12-16 14:42:19 -08:00
Vidar Holen 5b3f17c29d Allow tests to access token positions for fixes 2018-12-16 13:17:59 -08:00
Vidar Holen eb588f62f6 Enable autofix support. It's still preliminary. 2018-12-09 15:01:08 -08:00
Vidar Holen bcd13614eb Improve Fix memory usage 2018-12-09 15:01:08 -08:00
Vidar Holen a8376a09a9 Minor renaming and output fixes 2018-12-09 15:01:08 -08:00
Ng Zhi An 5ed89d2241 Change definition of Replacement, add ToJSON instance for it 2018-12-09 15:01:08 -08:00
Ng Zhi An 4a87d2a3de Expose token positions in params, use that to construct fixes 2018-12-09 15:01:08 -08:00
Ng Zhi An 41613babd9 Prototype fix 2018-12-09 15:01:08 -08:00
Vidar Holen 66b5f13c6f Make wiki links fit in 80 columns 2018-12-02 19:08:06 -08:00
Vidar Holen 1b207b3d43 Preemptively fix possible '-- |' breakage 2018-11-26 20:43:15 -08:00
Vidar Holen cb76951ad2 Add warnings for 'exit' similar to 'return' (fixes #1388) 2018-11-24 23:05:40 -08:00
Vidar Holen 2827b35696 SC2240: Warn about `. script args..` in sh/dash (fixes #1373) 2018-11-07 18:04:18 -08:00
Vidar Holen 620c9c2023 Also warn about glob matching with [ a != b* ] (fixes #1374) 2018-11-01 04:47:44 -07:00
Vidar Holen df0a0d41fa Add SC1133: Warn when a line starts with |/||/&& (fixes #1359) 2018-10-21 17:46:46 -07:00
Vidar Holen b815242506 Improve regex parsing (fixes #1367) 2018-10-21 15:25:35 -07:00
Vidar Holen 07b5aa2971 Add SC2239: shebang is not absolute path. 2018-10-17 20:38:21 -07:00
Vidar Holen f7b82658f4 Add $# to list of variables not containing spaces (fixes #1362) 2018-10-17 09:00:52 -07:00
Vidar Holen e0e46e979a Add wiki links to output, and a -W controlling it. (Fixes #920) 2018-10-10 21:53:43 -07:00
Peter Simons 5f1c969546 getParentTree: avoid pattern matching in do notation
Pattern matching in "do" requires a MonadFail context, which we don't have in
pure code. Instead, we'll use "case-of" to bind the part of the state that
we're interested in.
2018-09-27 17:30:41 +02:00
Vidar Holen dadfdfde97 Don't suggest subshells for cd ..; foo; cd.. 2018-09-21 21:08:41 -07:00
Vidar Holen 3e2cb26119 Add SC2238 about redirections to command names 2018-09-17 17:46:49 -07:00
Vidar Holen a06d7c1841
Merge pull request #1324 from ngzhian/679
Understand array variable declaration in read (fixes #679)
2018-09-15 12:33:58 -07:00
Michael Diamond 6db392511b Expand "rhs"; this abbreviation seems needlessly obfuscating. 2018-09-12 14:22:40 -07:00
Ng Zhi An 07f04e13ce Understand array variable declaration in read (fixes #679 fixes #1272)
It used to only treat all trailing variables in read as varaible
declarings, but an array variable can be declared in other positions:

    read -a foo -r

foo is a declared variable, and multiple such variables can be declared.
2018-09-08 09:19:02 -07:00
Vidar Holen f0a2e688c4 Don't warn about LINENO since it's now POSIX. Fixes #644 2018-09-03 12:36:25 -07:00
Vidar Holen 3d03b0ab3b Suggest -z/-n instead of ! -n/-z (fixes #1326). 2018-08-28 20:15:54 -07:00
Vidar Holen 488d6dcb41 Improve find leading flag detection (fixes #1312) 2018-08-26 18:18:57 -07:00
Vidar Holen d02a9bbcce Account for &&/||/{}/() in SC2233&co (fixes #1320). 2018-08-26 17:36:10 -07:00
Vidar Holen 932e2b3538 Merge branch 'opqaque-interface' of https://github.com/ngzhian/shellcheck into ngzhian-opqaque-interface 2018-08-18 20:32:27 -07:00
Martin Schwenke 3fe11927bb SQUASH: --severity specifies *minimum* severity to be handled
Signed-off-by: Martin Schwenke <martin@meltin.net>
2018-08-18 20:05:56 -07:00
Martin Schwenke b16da4b242 Add command-line option -S/--severity
Specifies the maximum severity of errors to handle.  For example,
specifying "-S warning" means that errors of severity "info" and
"style" are ignored.

Signed-off-by: Martin Schwenke <martin@meltin.net>
2018-08-18 20:05:56 -07:00
Ng Zhi An c8e0797350 Make data in Interface more opaque 2018-08-17 22:10:18 -07:00
Vidar Holen 15aaacf715 Add test for parsing bitwise not 2018-08-15 18:30:10 -07:00
Vidar Holen 5ef4229f61 Modernize SC2028 echo escape test 2018-08-07 19:31:28 -07:00
Ng Zhi An 8be76b13b9 Use regex to match special flags for printf
Fixes #1310
2018-08-05 22:45:24 -07:00
Vidar Holen 581be5878b Suggest 'cat' when piping/redirecting to echo (fixes #1292) 2018-07-28 17:38:53 -07:00
Vidar Holen 0f835a5a2c Don't trigger SC2222 for fallthrough case branches (fixes #1044) 2018-07-28 12:30:06 -07:00
Vidar Holen 4b0a35d4c9
Merge pull request #1302 from pjeby/fix949
Fix #949 (failing on @ in function names)
2018-07-26 21:07:48 -07:00
Vidar Holen 51e0c1be62 Use three instead of two dots in 2006 message 2018-07-26 19:59:42 -07:00
Vidar Holen d8a32da07f Retire SC1117 (unknown quoted escapes) due to noise 2018-07-26 19:23:53 -07:00
PJ Eby 0d1a34a291 Fix #949 (failing on @ in function names)
'@' was previously mentioned in 5005dc0fa1 as a
character needed to fix #909, but was not included
in the actual change at that time.
2018-07-23 16:18:35 -04:00
Vidar Holen 5005dc0fa1 Allow directive/-s to override shebang blacklist (fixes #974) 2018-07-22 12:43:51 -07:00
Vidar Holen b8ee7436e5 Add a test for 03ce3b15 2018-07-21 13:51:21 -07:00
Vidar Holen da8e450386 Realign =s 2018-07-21 13:51:08 -07:00
Ng Zhi An 03ce3b15b6 Fix false positive when indexing into array in cond
Fixes #1268
2018-07-18 22:31:58 -07:00
Vidar Holen f91b5bc270
Merge pull request #1256 from ngzhian/mv-stdin
Do not warn on mv -i (fixes #1251)
2018-06-24 11:47:53 -07:00
Vidar Holen b01f1128c7 Make SC1012 "printf '\t'" suggestion use single quotes 2018-06-24 11:47:00 -07:00
Vidar Holen 75fb4da387 Don't warn about tr '[=e=]' equivalence classes 2018-06-23 16:55:35 -07:00
Vidar Holen 6869c2fa18
Merge pull request #1261 from ngzhian/1188
Do not warn find --help (fixes #1188)
2018-06-23 16:07:23 -07:00
Vidar Holen 868a7be33e Improve spans for some warnings 2018-06-17 19:19:18 -07:00
Vidar Holen 7138abff4b Expose (some) span information in TTY output 2018-06-17 17:44:31 -07:00
Vidar Holen 9d3e79b576 Require all Ids to be constructed with a span 2018-06-16 17:33:08 -07:00
Vidar Holen 402e635f86 Warn about & followed by letters, e.g. http://foo/?a=b&c=d 2018-06-16 12:30:19 -07:00
Ng Zhi An 91cbcddd9d Do not warn find --help (fixes #1188) 2018-06-14 22:40:26 -07:00
Ng Zhi An 0cc45447d3 Do not warn on mv -i (fixes #1251) 2018-06-13 21:39:37 -07:00
Vidar Holen 32a53f21b5
Merge pull request #1239 from ngzhian/end_column
End column
2018-06-13 19:29:55 -07:00
Ng Zhi An 7adeaccd11 Check popd flags for -n (fixes #1252) 2018-06-12 22:53:41 -07:00
Ng Zhi An b63483d44c Remove unused import 2018-06-12 22:50:02 -07:00
Ng Zhi An 4111ce8fde Make end pos non-optional 2018-06-12 22:39:06 -07:00
Ng Zhi An b9a9eb2529 Change getNextId to create a zero width span at new id 2018-06-12 22:17:35 -07:00
Ng Zhi An e717802de1 Change usage of endPosOfStartId to startSpan and endSpan 2018-06-12 22:11:11 -07:00
Ng Zhi An 1699c9e9ba Add api to begin and end a span of source code 2018-06-12 21:56:53 -07:00
Vidar Holen bfc32200e2 Correctly consider $'..' a literal (fixes #1242) 2018-06-10 20:23:10 -07:00
Ng Zhi An 8ff35fb4af Add end pos to readSingleQuoted 2018-06-07 23:09:59 -07:00
Ng Zhi An 29e8c0a16e Add end pos to readDollarBraced 2018-06-07 22:25:16 -07:00
Ng Zhi An 3848788c2d Add end pos to readDollarVariable 2018-06-07 21:55:41 -07:00
Ng Zhi An 0c459ae2cb Add function to set end pos of start id 2018-06-07 21:55:41 -07:00
Ng Zhi An e496b413bd Remove usage of withNextId 2018-06-07 21:55:41 -07:00
Ng Zhi An 48ac654a93 Merge end pos map into start pos map 2018-06-07 21:55:41 -07:00
Russell Harmon 4470fe715c Support emitting a correct end column on SC2086
This does the necessary work to emit end columns on AST analyses. SC2086
is made to emit a correct end column as an illustrative example.

For example:
```
$ shellcheck -s bash -f json /dev/stdin <<< 'echo $1'
[{"file":"/dev/stdin","line":1,"endLine":1,"column":6,"endColumn":8,"level":"info","code":2086,"message":"Double quote to prevent globbing and word splitting."}]
```

This change deprecates the parser's getNextId and getNextIdAt, replacing
it with a new withNextId function. This function has the type signature:

withNextId :: Monad m => ParsecT s UserState (SCBase m) (Id -> b) -> ParsecT s UserState (SCBase m) b

Specifically, it should be used to wrap read* functions and will pass in
a newly generated Id which should be used to represent that node.
Sub-parsers will need their own call to withNextId in order to get a
unique Id.

In doing this, withNextId can now track both the entry and exit position
of every read* parser which uses it, enabling the tracking of end
columns throughout the application.
2018-06-07 21:55:41 -07:00
Vidar Holen b5e5d249c4
Merge pull request #1237 from ngzhian/1234
Check if builtin cd is called
2018-05-27 18:34:18 -07:00
Vidar Holen efffc6150b Warn about string operations on $@/$* (fixes #1236) 2018-05-27 12:53:01 -07:00
Ng Zhi An cb4a0c0250 Check if builtin cd is called
Fixes #1234
2018-05-27 11:42:37 -07:00
Vidar Holen 135cf5932f Parse here docs as per spec (fixes #1050) 2018-05-26 21:01:18 -07:00
Vidar Holen 467dfe07b6 Add a unit test and separate ids for 884eff0c 2018-05-23 19:51:36 -07:00
Vidar Holen d140388bea
Merge pull request #1232 from ngzhian/source-x
Add T_SourceCommand to wrap source commands and sourced code
2018-05-23 19:41:55 -07:00
Ng Zhi An 884eff0c36 Add T_SourceCommand to wrap source commands and sourced code
Fixes #1181
2018-05-22 22:43:26 -07:00
Vidar Holen 1d8047cce1 Warn about unnecessary subshells in tests 2018-05-22 22:35:37 -07:00
Vidar Holen 77546fba2f
Merge pull request #1223 from ngzhian/1124
Handle offset references of the form [foo]:bar (fixes #1124)
2018-05-20 17:26:08 -07:00
Vidar Holen 4a5ee06ce4
Merge pull request #1206 from ngzhian/aeson
Change to aeson (fixes #1085)
2018-05-20 17:19:20 -07:00
Ng Zhi An 4dceecb1ed Handle offset references of the form [foo]:bar (fixes #1124) 2018-05-13 22:48:02 -07:00
Vidar Holen 46c10c1571
Merge branch 'master' into 1199 2018-05-13 16:55:53 -07:00
Vidar Holen 407f6a63b9
Merge branch 'master' into 1186 2018-05-13 16:47:18 -07:00
Vidar Holen 7ee7448a70
Merge pull request #1221 from ngzhian/1192
Assignments are okay in SC2094 (fixes #1192)
2018-05-13 16:44:11 -07:00
Ng Zhi An 0c88fbc76d Suppress SC2016 for git filter-branch (fixes #196) 2018-05-13 15:18:55 -07:00
Ng Zhi An b3362f1dc3 Assignments are okay in SC2094 (fixes #1192) 2018-05-13 15:17:32 -07:00
Ng Zhi An 2c6bc43614 Add Data.Monoid 2018-05-13 11:44:21 -07:00
Vidar Holen 235bf6605f
Merge pull request #1205 from ngzhian/remove-unused
Remove unused code
2018-05-12 19:15:42 -07:00
Vidar Holen 7029a713c7
Merge pull request #1207 from ngzhian/1184
When given a %* format string, expect one more argument
2018-05-12 18:50:23 -07:00
Vidar Holen cf608dc2f6 Parse FD move operations like 2>&1- correctly. Fixes #1180. 2018-05-12 18:30:35 -07:00
Vidar Holen bca2ad4e18 Don't think declare -x -F var is used (fixes #1209). 2018-05-12 17:34:23 -07:00
Vidar Holen 719e1854e5 Clarify 'export' suggestion in SC2034 (unused vars). 2018-05-11 21:39:54 -07:00
Ng Zhi An 20ad7dc8de Add unset to list of commands exempt from 2016
Fixes #1186
2018-05-06 16:45:57 -07:00
Ng Zhi An f84859ab90 When given a %* format string, expect one more argument
Fixes #1184
2018-05-06 16:39:51 -07:00
Ng Zhi An 08235a1cb2 Change to aeson (fixes #1085)
Adds bytestring as a dependency for putStrLn encoded values.
2018-05-06 16:07:53 -07:00
Ng Zhi An 728922d2b8 Remove unused code 2018-05-06 15:24:34 -07:00
Ng Zhi An a953dd3454 Whitelist rename for SC2016 (fixes #1199) 2018-05-06 10:28:17 -07:00
Vidar Holen ef6a5b97b9 Refactor sudo checks into CommandChecks 2018-04-30 22:59:23 -07:00
Stefan Knudsen 5adfce72e1 Warn about invalid arguments to sudo 2018-04-29 01:16:31 -04:00
Vidar Holen bb4ce86fab Account for array index in SC2154 ${var:?} (fixes #1166) 2018-04-28 12:09:54 -07:00
Vidar Holen 7ec2fa2d3e Remove 'nice' from list of non-reading commands (fixes #1169) 2018-04-28 11:39:42 -07:00
Vidar Holen 5481ccd7f7 Warn about elseif or elsif as command names (fixes #1177) 2018-04-27 22:23:37 -07:00
Vidar Holen a1d8947297 Fix broken test stripping 2018-04-22 14:57:43 -07:00
Vidar Holen ce7658ed86
Merge pull request #1168 from vmchale/master
Bump to ghc 8.4.1
2018-04-22 14:10:25 -07:00
Vidar Holen 32af2783f0 Allow stripping unit tests 2018-04-02 21:14:23 -07:00
Vanessa McHale 08aab3c161 hlints 2018-04-02 11:48:21 -05:00
Vanessa McHale cf39adff75 bump to latest ghc 2018-04-02 11:44:18 -05:00
Vidar Holen 08d2eef411 Whitelist docker for SC2016 about '$var'. Fixes #1161 2018-03-29 19:27:34 -07:00
Vidar Holen 4aca1ff128 Warn when printf arg count is not a multiple of format count 2018-03-28 08:57:38 -07:00
Geir Hauge 55216792c9
Consider type a valid command in sh
[type](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/type.html) *is* defined by POSIX, and even the bourne shell has the `type` command.
2018-03-25 12:11:57 +02:00
Vidar Holen 764b242f1b Suggest quoting expansions in for loop globs 2018-03-24 17:43:20 -07:00
Oleg Grenrus cd7c077ecc Move library into src/ 2018-03-08 19:57:40 +02:00