Joseph C. Sible
1c6202dba4
Avoid some awkward parentheses with forM_
2020-04-05 22:25:19 -04:00
Joseph C. Sible
64c31d9142
Use fromRight instead of reimplementing it
2020-04-05 22:23:22 -04:00
Joseph C. Sible
8a6679fd8a
Remove unnecessary fromMaybe and when from bashism
2020-04-05 22:03:50 -04:00
Joseph C. Sible
facf0d1e27
Write getLiteralArgs with foldr and without fromMaybe or monads
2020-04-05 21:59:27 -04:00
Joseph C. Sible
cd38afce26
Make it slightly lazier still (and more clear)
2020-04-05 21:46:08 -04:00
Joseph C. Sible
5084ba8d7e
Make skipRepeating lazier and faster
2020-04-05 21:39:14 -04:00
Joseph C. Sible
ed331b816b
Simplify warnRedundant
2020-04-05 20:32:39 -04:00
Joseph C. Sible
cfa2a663af
Simplify checkSetAssignment
2020-04-05 20:30:37 -04:00
Joseph C. Sible
df4928f4e3
Use MultiWayIf instead of case-matching on ()
2020-04-05 20:30:37 -04:00
Joseph C. Sible
9747b1d5c3
Simplify checkArg
2020-04-05 20:10:56 -04:00
Joseph C. Sible
fa841cb270
Prefer pattern matching in undirected
2020-04-05 20:08:02 -04:00
Joseph C. Sible
e8501151dd
Use a guard instead of unless
2020-04-05 20:04:54 -04:00
Joseph C. Sible
9027a9239f
Use pattern matching instead of snd
2020-04-05 20:03:17 -04:00
Joseph C. Sible
773e98868d
Use foldr in checkFindNameGlob
2020-04-05 19:53:40 -04:00
Joseph C. Sible
d45ab327b0
Only perform the comparisons once
2020-04-05 19:45:28 -04:00
Joseph C. Sible
0f9b0f18a4
Remove unnecessary cases from wordToPseudoGlob
2020-04-05 19:30:21 -04:00
Joseph C. Sible
322842b57e
Remove unnecessary monadicity from wordToPseudoGlob
2020-04-05 19:29:40 -04:00
Joseph C. Sible
b6cff5ea0e
Simplify getAssociativeArrays
2020-04-05 19:06:30 -04:00
Joseph C. Sible
8f105074fe
Simplify getCommandNameAndToken
2020-04-05 19:01:56 -04:00
Joseph C. Sible
d22e0aa4a7
Simplify process
...
Note to self: This is a lot like foldr or traverse, and would be trivial to
implement as such if it didn't need to peek ahead when takesArg is true. I
wonder if there's a clean way to implement it in terms of one of them anyway.
2020-04-05 16:45:45 -04:00
Joseph C. Sible
fb55072302
Implement supportsArrays with pattern-matching
2020-04-05 16:30:59 -04:00
Joseph C. Sible
0cc5ed4563
Don't bother with asks if you're just immediately binding the result anyway
2020-04-05 16:25:43 -04:00
Joseph C. Sible
ca41440a67
Simplify getSpecial
2020-04-05 16:21:07 -04:00
Joseph C. Sible
1cf0aa25e9
Simplify dropPrefix
2020-04-05 16:19:18 -04:00
Joseph C. Sible
4604066c37
Use head instead of (!! 0)
2020-04-05 16:16:12 -04:00
Joseph C. Sible
2ebf522a52
Simplify isArrayFlag
2020-04-05 16:13:55 -04:00
Joseph C. Sible
e4eb2d157f
Remove an unnecessary operator section
2020-04-05 16:13:55 -04:00
Joseph C. Sible
f109f9ab92
Remove unnecessary as-patterns
2020-04-05 16:13:55 -04:00
Joseph C. Sible
67e091674e
Remove unnecessary maybeToList
...
The functions we use here are polymorphic enough to work in the [] monad,
so there's no point to use them in the Maybe monad and then convert.
2020-04-05 16:13:54 -04:00
Joseph C. Sible
f833ee3d5a
Use a list comprehension instead of a concatMap with extra lists
2020-04-05 15:54:12 -04:00
Joseph C. Sible
f55d8c45e5
Simplify causesSubshell
2020-04-05 15:54:12 -04:00
Joseph C. Sible
14ee462ccd
Use execState instead of reimplementing it
2020-04-05 15:50:42 -04:00
Joseph C. Sible
b3c04ce3d0
Implement findFirst in terms of foldr
2020-04-05 15:50:42 -04:00
Joseph C. Sible
b0dbc79f69
Remove unnecessary Maybe from isQuoteFreeElement
2020-04-05 15:07:36 -04:00
Joseph C. Sible
2a8170ba05
Use force instead of reimplementing it
2020-04-05 15:01:57 -04:00
Vidar Holen
01f4423465
Disable SC2257 about > $((i=42)) for Dash
2020-04-05 11:38:22 -07:00
Joseph C. Sible
d2fa88dd91
Simplify nameExpansion
2020-04-05 14:04:23 -04:00
Vidar Holen
bd717c9d1b
Don't warn about [ 0 -ne $FOO ] || [ 0 -ne $BAR ] ( fixes #1891 )
2020-04-01 22:09:00 -07:00
Vidar Holen
da0931740f
Merge pull request #1876 from fork-graveyard/master
...
recognize `: ${parameter=word}` as assignment
2020-04-01 18:52:53 -07:00
Vidar Holen
c60323fb25
Merge pull request #1873 from josephcsible/checkwhilereadpitfalls
...
Simplify checkWhileReadPitfalls
2020-03-31 19:10:53 -07:00
Vidar Holen
db11e2f663
Merge pull request #1872 from josephcsible/checkforinquoted
...
Simplify checkForInQuoted
2020-03-31 19:10:25 -07:00
Joseph C. Sible
8cf037fe5e
Fix #1892 : Use pattern synonyms to clean up AST
2020-03-28 18:38:07 -04:00
Vidar Holen
7963eeab9d
Include shebang in AST traversal ( fixes #1858 )
2020-03-16 21:36:41 -07:00
girst
7a5e261d03
recognize `: ${parameter=word}` as assignment
2020-03-16 23:04:54 +01:00
Joseph C. Sible
9d5363377e
Simplify checkWhileReadPitfalls
...
* Clean up usage of not
* Use a case match instead of sequence_ and a do block
2020-03-16 00:14:22 -04:00
Joseph C. Sible
86d470c74f
Simplify checkForInQuoted
...
* Avoid some unnecessary fmaps
* Reuse an identical pattern-match for two guards
* Apply De Morgan's law
* Use forM_ to avoid an unnecessary where
2020-03-15 16:05:55 -04:00
Vidar Holen
a57f6d2886
Improve detection of for loops with single values
2020-03-15 11:30:56 -07:00
Vidar Holen
d28c8f883f
Merge pull request #1865 from josephcsible/patch-1
...
Use headOrDefault instead of fromMaybe and listToMaybe
2020-03-14 21:21:13 -07:00
Vidar Holen
c43b19f897
Make SC2095 (ssh in while read loops) more robust and suggest fixes
2020-03-14 21:15:47 -07:00
Joseph C. Sible
45a67e7c64
Use headOrDefault instead of fromMaybe and listToMaybe
2020-03-10 13:27:52 -04:00
Austin English
741d499b3d
src/ShellCheck/Analytics.hs: suggest using a shell directive for SC2148
2020-03-07 19:23:35 -06:00
Vidar Holen
7b998239af
SC2257: Warn when changing arithmetic variables in redirections
2020-02-17 18:16:57 -08:00
Vidar Holen
4c9210af79
Inspect 'alias' commands for referenced variables ( Fixes #1832 )
2020-02-17 14:20:21 -08:00
Vidar Holen
a75219e525
Remove unused instance Ord Replacement ( fixes #1829 )
2020-02-17 12:44:38 -08:00
Vidar Holen
99d6df8a08
Bump SC1102/SC1105 about ambiguous `$((` to Error ( fixes #1836 )
2020-02-17 12:27:24 -08:00
Vidar Holen
106f321cf0
Parse keywords with case sensitivity ( fixes #1809 )
2020-02-17 11:13:29 -08:00
Joseph C. Sible
eecd003e2d
Optimize patterns in checkFindNameGlob
...
1. Instead of pattern-matching the same list multiple times, do it only
once and then pass the pieces separately.
2. Don't reconstruct an object equivalent to one we just deconstructed.
2020-02-11 01:04:49 -05:00
Joseph C. Sible
440d0038aa
Remove a partial pattern match equivalent to fromJust from checkFindNameGlob
2020-02-11 01:03:10 -05:00
Vidar Holen
c2d67c15f8
Merge pull request #1802 from szydell/master
...
SC2016, repair false error for M language parser
2020-02-10 18:25:28 -08:00
Vidar Holen
6043deb8f2
Merge pull request #1824 from josephcsible/patch-1
...
Simplify literalEquals
2020-02-10 18:20:05 -08:00
Vidar Holen
d0beac6d0b
Merge pull request #1826 from josephcsible/nofromjust
...
Use the Identity monad to avoid unnecessary uses of fromJust
2020-02-10 18:05:36 -08:00
Vidar Holen
b88b253cad
Merge pull request #1827 from josephcsible/nofromjust2
...
Remove more unnecessary uses of fromJust
2020-02-10 18:01:38 -08:00
Joseph C. Sible
85c49a8af9
Simplify mockedSystemInterface
2020-02-09 23:50:48 -05:00
Joseph C. Sible
42abcb7ae2
Simplify shellFromFilename
2020-02-09 23:18:09 -05:00
Joseph C. Sible
d5c5128115
Use isJust instead of reimplementing it
2020-02-09 23:18:09 -05:00
Joseph C. Sible
6d06103cab
Remove unnecessary uses of head
2020-02-09 23:18:09 -05:00
Joseph C. Sible
c95914f9b3
Simplify determineShell
2020-02-09 23:18:09 -05:00
Joseph C. Sible
ea24e25efd
Use Map.member instead of isJust and Map.lookup
2020-02-09 23:18:09 -05:00
Joseph C. Sible
8f0448133c
Use isNothing instead of reimplementing it
2020-02-09 23:18:08 -05:00
Joseph C. Sible
7fc9496320
Use forM_ instead of reimplementing it
2020-02-09 23:18:08 -05:00
Joseph C. Sible
962fad038c
Avoid a zip that breaks fusion
2020-02-09 23:18:08 -05:00
Joseph C. Sible
a223a7a5a5
Remove unnecessary fromMaybes
2020-02-09 23:18:08 -05:00
Joseph C. Sible
8e9290badb
Do toLower earlier
2020-02-09 23:17:53 -05:00
Joseph C. Sible
292b0840d9
Simplify a double negative
2020-02-09 23:17:53 -05:00
Joseph C. Sible
43c24cf79c
Use Map.! instead of reimplementing it
2020-02-09 23:17:53 -05:00
Joseph C. Sible
21ad4196db
Simplify findFunction
2020-02-09 23:17:53 -05:00
Joseph C. Sible
172aa7c4fc
Avoid unnecessary use of when and unless
2020-02-09 23:17:53 -05:00
Joseph C. Sible
c290eace54
Inline an uncurry
2020-02-09 23:17:53 -05:00
Joseph C. Sible
a6efd02807
Simplify <> for SpaceStatus
2020-02-09 23:17:53 -05:00
Joseph C. Sible
057cc714b3
Simplify matchToken
2020-02-09 23:17:52 -05:00
Joseph C. Sible
0e00249eae
Use void instead of do and return ()
2020-02-09 23:17:52 -05:00
Joseph C. Sible
0ca50159ec
Use head instead of reimplementing it
...
Normally I wouldn't use head, but this code is partial anyway.
2020-02-09 23:17:52 -05:00
Joseph C. Sible
7e6a556ef1
Get rid of potentially
...
This already exists as sequence_.
2020-02-09 23:17:52 -05:00
Joseph C. Sible
4bfe6496d9
Simplify check and checkTranslatedStringVariable
...
Avoid the "potentially" and "Maybe" business, and just use regular guards.
2020-02-09 23:17:52 -05:00
Joseph C. Sible
ffbbfcfe25
Use mapM_ and sequence_ instead of reimplementing them
2020-02-09 23:17:52 -05:00
Joseph C. Sible
cc424bac11
Use find instead of take 1 and filter
2020-02-09 23:17:52 -05:00
Joseph C. Sible
cb01cbf7eb
Use mapM instead of implementing a slower version of it
2020-02-09 23:17:52 -05:00
Joseph C. Sible
1e32139f66
Replace mapMaybe and concatMap with list comprehensions
2020-02-09 23:17:52 -05:00
Joseph C. Sible
4d92a2e15c
Add getLiteralStringDef and simplify with it
2020-02-09 21:36:38 -05:00
Joseph C. Sible
f8648e5465
Switch getLiteralStringExt to Identity where it can never be Nothing
2020-02-09 21:26:42 -05:00
Joseph C. Sible
4fd8de058b
Remove more unnecessary uses of fromJust
2020-02-08 23:48:36 -05:00
Joseph C. Sible
aaffe38198
Use the Identity monad to avoid unnecessary uses of fromJust
2020-02-08 23:20:54 -05:00
Joseph C. Sible
ef51ed3950
Simplify literalEquals
2020-02-08 14:09:17 -05:00
Vidar Holen
9d604ae732
Merge pull request #1822 from yetamrra/arrayindex
...
SC2191: Tighten index checks
2020-02-08 10:48:07 -08:00
Vidar Holen
1ca0b72329
Merge pull request #1816 from josephcsible/cleanups
...
Various cleanups and refactorings
2020-02-08 10:38:27 -08:00
Benjamin Gordon
474b23d6e7
SC2191: Tighten index checks
...
When adding a value containing an equals sign to an indexed array, the
left side is treated as an index if it looks like [N]=val and N is
numeric. SC2191 currently warns about anything that looks like key=val
even though non-numeric values of key will never be treated as an index.
This causes spurious warnings for the common pattern of building up
program arguments in an array, such as:
args=(
--dry-run
--in="${my_var}"
--out=/some/path
-f
)
/bin/program "${args[@]}"
Since only numeric expressions can be a valid index for an indexed
array, only emit SC2191 if the left side of a literal string containing
an equals looks numeric. Other more complicated constructs should still
warn because shellcheck doesn't know if they may evaluate to a numeric
result. Associative arrays still warn because a non-numeric left side
is a valid subscript.
2020-02-05 16:50:32 -07:00
Joseph C. Sible
e820a5642b
Adjust a pattern to get rid of a fromJust
2020-02-02 00:40:22 -05:00
Joseph C. Sible
392b57b8e8
Use maybe instead of isJust and fromJust
2020-02-02 00:27:05 -05:00
Joseph C. Sible
6595e14d25
Adjust a pattern to avoid tail
2020-02-02 00:24:24 -05:00
Joseph C. Sible
115ef29079
Use pattern matching instead of head
2020-02-02 00:16:59 -05:00
Joseph C. Sible
76b798394f
Use case matching instead of null
...
Using null followed by a head, tail, or a partial pattern match is
an anti-pattern. Use case matching instead.
2020-02-01 23:07:16 -05:00
Joseph C. Sible
8a005526cc
Use drop instead of splitAt since we only use the second half
2020-02-01 23:04:04 -05:00
Joseph C. Sible
c29b6afa56
Use null instead of comparing with empty lists
2020-02-01 23:04:04 -05:00
Joseph C. Sible
e6e89d68fd
Use list comprehensions instead of clunky combinations of map and filter
2020-02-01 23:04:04 -05:00
Joseph C. Sible
f25b8bd03a
Use gets instead of fmapping the result of get
2020-02-01 22:50:20 -05:00
Joseph C. Sible
d7278b95f2
Remove unnecessary "map snd"
2020-02-01 22:50:19 -05:00
Joseph C. Sible
5487b3f229
Use sortOn instead of sortBy and comparing
2020-02-01 22:50:18 -05:00
Joseph C. Sible
28978a8b65
Use maybe instead of fromMaybe and fmap
2020-02-01 22:50:17 -05:00
Joseph C. Sible
f5c6771016
Use find instead of listToMaybe and filter
2020-02-01 22:50:16 -05:00
Joseph C. Sible
0f48bb78a5
Remove incorrect otherwise
...
You're supposed to use otherwise where you need a Boolean, not a pattern
match. This is misleadingly shadowing the real otherwise. Use _ instead.
2020-02-01 22:50:14 -05:00
Joseph C. Sible
93be86f988
Use "drop 1" instead of clumsily rewriting it
2020-02-01 22:50:14 -05:00
Joseph C. Sible
3449e6be21
Get rid of our getOpt, as it already exists as lookup
2020-02-01 22:50:13 -05:00
Joseph C. Sible
2e52c2b56a
Use notElem instead of not on the result of elem
2020-02-01 22:50:11 -05:00
Vidar Holen
1696296c0a
Make SC2141 trigger more broadly
2020-02-01 16:51:40 -08:00
Peter Gromov
a82e606e8d
Don't trigger SC2154 (unassigned var) in `-n`/`-z` expressions #1583
2020-01-31 14:49:25 +01:00
Marcin Szydelski
93486ed6ac
SC2016: disable for mumps -run %XCMD and LOOP%XCMD
2020-01-21 12:43:27 +01:00
Gandalf-
fdd02c94c0
Issue 1759 mapfile and process substition
...
https://github.com/koalaman/shellcheck/issues/1759
When a simple process substition is used, this tripped up
the getMapfileArray function by making the last argument
not a variable
2019-12-22 23:19:03 -08:00
Vidar Holen
cbcca528ae
Merge branch 'iss1724-builtin-support' of https://github.com/jabberabbe/shellcheck into jabberabbe-iss1724-builtin-support
2019-12-21 18:13:07 -08:00
Vidar Holen
83187dafd7
Added a unit test for parsing shell keyword case branches
2019-12-21 17:59:09 -08:00
Gandalf-
3f296a08c1
Issue 1731 Literals in case patterns
...
https://github.com/koalaman/shellcheck/issues/1731
Any literal except esac is valid pattern in a case statement
2019-12-18 20:23:48 -08:00
Vidar Holen
0f15fa49ba
Make SC2230 optional
2019-12-07 16:11:49 -08:00
Vidar Holen
9f578f41a1
Explicitly add 'mappend' for old GHC versions
2019-11-16 11:16:15 -08:00
Vidar Holen
989ac32625
Merge pull request #1734 from gabrielelana/braced-regular-for
...
Parse regular `for` with body in curly braces
2019-11-15 20:59:51 -08:00
Vidar Holen
2bbfd0570d
Merge pull request #1735 from gabrielelana/quoted-heredoc
...
Support for heredoc quoted token like `'"FOO"`
2019-11-15 20:27:10 -08:00
Vidar Holen
f44624a9c0
Hide <> from Writer to not conflict with Semigroup
2019-11-14 20:02:25 -08:00
Vidar Holen
c75bbcbd60
Include missing Semigroup import
2019-11-13 22:10:27 -08:00
Vidar Holen
4a63a3a8bd
For SC2256, make sure the complete string is a variable name
2019-11-13 21:48:01 -08:00
Benjamin Gordon
2341a4c683
SC2256: Check for translated strings matching known variables
...
SC2247 already warns about translated strings that look like $"(foo)" or
$"{foo}". Since typical use of translated strings is to translate whole
messages, a string like $"foo" is likely to be a similar mistake if foo
is the name of an existing variable. Conversely, a string like
$"foo bar" is potentially meant to be a message id even if foo is a
known variable.
Add a warning for the $"foo" case, but make it separate from the
existing warning so that projects that reuse variable names as their
message ids can separately disable the new warning.
2019-11-13 16:41:16 -07:00
Vidar Holen
93eca1cb8e
Only trigger SC1014 when command is a complete word ( fixes #1737 )
2019-11-03 13:26:23 -08:00
Vidar Holen
e701cf6fad
Warn about [ x -ot y ] in POSIX mode
2019-11-03 13:25:35 -08:00
Vidar Holen
5962b01816
Correctly handle empty variables for SC2086 ( fixes #1722 )
2019-11-03 12:46:25 -08:00
Tito Sacchi
84ca7711c4
Make command-specific checks act on `builtin ...`
...
Now if shellchecks encounters a command like `builtin cmd ...`
it applies the same check that would be applied to `cmd ...`.
2019-11-01 14:28:00 +01:00
Tito Sacchi
0e0de94045
Fix issue #1724
...
(bash: missing support for 'builtin' keyword)
Now shellcheck looks for the arguments to 'builtin' to determine
read/written variables. A change in the parser makes sure that
assignments are parsed correctly in commands that start with 'builtin'.
2019-11-01 13:49:17 +01:00
gabriele.lana
699aac589a
Support for heredoc quoted token like `'"FOO"`
...
Fixes #1650
2019-10-26 17:36:32 +02:00
gabriele.lana
30c75340e6
Parse regular `for` with body in curly braces
...
Fixes #1694
2019-10-26 15:41:46 +02:00
Vidar Holen
4dfd7eb1cf
Use single quotes for the format string example in SC2059
2019-10-24 10:33:17 -07:00
Vidar Holen
60f75e5b8a
Warn about unexpected characters after ]/]] ( fixes #1680 )
2019-10-13 20:26:40 -07:00
Vidar Holen
f042b0ebd1
Merge branch 'iboss-ptk-read-t-0'
2019-10-12 20:55:32 -07:00
Vidar Holen
764fdcb260
Move failing test to correct check
2019-10-12 20:50:55 -07:00
Vidar Holen
7473d4a743
Make `read -t 0` test more forgiving towards other flags
2019-10-12 20:45:36 -07:00
Vidar Holen
91abd979f2
Merge branch 'read-t-0' of https://github.com/iboss-ptk/shellcheck into iboss-ptk-read-t-0
2019-10-12 20:23:13 -07:00
Vidar Holen
afea62de4e
Suggest using `$((..))` in `[ 2*3 -eq 6 ]` ( fixes #1641 )
2019-10-12 19:55:20 -07:00
Supanat Pothivarakorn
7fb399528c
Allow `read -t 0` to not require -r flag
...
since it has specific purpose for checking only
2019-10-02 22:34:43 +07:00
Vidar Holen
de9ab4e6ef
Fix glob range duplicate warning in [!!] ( fixes #1706 )
2019-09-28 14:03:11 -07:00
Vidar Holen
e01c470598
Suggest quoting case patterns, as for SC2053 ( fixes #1682 )
2019-09-08 20:08:43 -07:00
Vidar Holen
c175971bf0
Make `-f diff` stop saying it found more issues when it didn't.
2019-07-28 20:50:50 -07:00
Vidar Holen
38bb156a1c
Warn about $_ in POSIX sh ( fixes #1647 )
2019-07-21 21:22:16 -07:00
Vidar Holen
023ae5dfda
Don't warn about printf '%()T' without corresponding argument
2019-07-20 15:10:41 -07:00
Vidar Holen
788cf17076
Fix bad advice for SC2251 ( fixes #1588 )
2019-07-04 19:10:14 -07:00
Vidar Holen
78b8e76066
Also mention globbing in SC2206 ( fixes #1626 )
2019-07-04 17:43:18 -07:00