diff --git a/CHANGELOG.md b/CHANGELOG.md index 60f890c..dc6d258 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - SC2236/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 shen passing additional arguments to dot (.) in sh/dash - SC1133: Better diagnostics when starting a line with |/||/&& ### Changed - Most warnings now have useful end positions diff --git a/src/ShellCheck/Checks/Commands.hs b/src/ShellCheck/Checks/Commands.hs index 2c8b00a..fbbb67a 100644 --- a/src/ShellCheck/Checks/Commands.hs +++ b/src/ShellCheck/Checks/Commands.hs @@ -92,6 +92,7 @@ commandChecks = [ ,checkWhich ,checkSudoRedirect ,checkSudoArgs + ,checkSourceArgs ] buildCommandMap :: [CommandCheck] -> Map.Map CommandName (Token -> Analysis) @@ -1008,5 +1009,16 @@ checkSudoArgs = CommandCheck (Basename "sudo") f -- This mess is why ShellCheck prefers not to know. parseOpts = getBsdOpts "vAknSbEHPa:g:h:p:u:c:T:r:" +prop_checkSourceArgs1 = verify checkSourceArgs "#!/bin/sh\n. script arg" +prop_checkSourceArgs2 = verifyNot checkSourceArgs "#!/bin/sh\n. script" +prop_checkSourceArgs3 = verifyNot checkSourceArgs "#!/bin/bash\n. script arg" +checkSourceArgs = CommandCheck (Exactly ".") f + where + f t = whenShell [Sh, Dash] $ + case arguments t of + (file:arg1:_) -> warn (getId arg1) 2240 $ + "The dot command does not support arguments in sh/dash. Set them as variables." + _ -> return () + return [] runTests = $( [| $(forAllProperties) (quickCheckWithResult (stdArgs { maxSuccess = 1 }) ) |])