Extend warnings about spaces around = to 'let'

This commit is contained in:
Vidar Holen 2021-08-08 15:48:50 -07:00
parent 4dd762253f
commit e5745568e8
2 changed files with 16 additions and 5 deletions

View File

@ -101,7 +101,7 @@ commandChecks = [
++ map checkArgComparison declaringCommands
++ map checkMaskedReturns declaringCommands
declaringCommands = ["local", "declare", "export", "readonly", "typeset"]
declaringCommands = ["local", "declare", "export", "readonly", "typeset", "let"]
optionalChecks = map fst optionalCommandChecks
@ -1156,11 +1156,13 @@ prop_checkArgComparison2 = verify (checkArgComparison "declare") "declare a =b"
prop_checkArgComparison3 = verifyNot (checkArgComparison "declare") "declare a=b"
prop_checkArgComparison4 = verify (checkArgComparison "export") "export a +=b"
prop_checkArgComparison7 = verifyNot (checkArgComparison "declare") "declare -a +i foo"
prop_checkArgComparison8 = verify (checkArgComparison "let") "let x = 0"
-- This mirrors checkSecondArgIsComparison but for arguments to local/readonly/declare/export
checkArgComparison str = CommandCheck (Exactly str) wordsWithEqual
checkArgComparison cmd = CommandCheck (Exactly cmd) wordsWithEqual
where
wordsWithEqual t = mapM_ check $ drop 1 $ arguments t
check arg = sequence_ $ do
wordsWithEqual t = mapM_ check $ arguments t
check arg = do
sequence_ $ do
str <- getLeadingUnquotedString arg
case str of
'=':_ ->
@ -1171,6 +1173,15 @@ checkArgComparison str = CommandCheck (Exactly str) wordsWithEqual
"Remove spaces around += to append."
_ -> Nothing
-- 'let' is parsed as a sequence of arithmetic expansions,
-- so we want the additional warning for "x="
when (cmd == "let") $ sequence_ $ do
token <- getTrailingUnquotedLiteral arg
str <- getLiteralString token
guard $ "=" `isSuffixOf` str
return $ err (getId token) 2290 $
"Remove spaces around = to assign."
headId t =
case t of
T_NormalWord _ (x:_) -> getId x

View File

@ -2810,7 +2810,7 @@ readLetSuffix = many1 (readIoRedirect <|> try readLetExpression <|> readCmdWord)
startPos <- getPosition
expression <- readStringForParser readCmdWord
let (unQuoted, newPos) = kludgeAwayQuotes expression startPos
subParse newPos readArithmeticContents unQuoted
subParse newPos (readArithmeticContents <* eof) unQuoted
kludgeAwayQuotes :: String -> SourcePos -> (String, SourcePos)
kludgeAwayQuotes s p =