From 3cf8b9ceabdc01d9eec4a71a260fcbd7ecdabf80 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Mon, 17 Apr 2017 21:00:41 -0700 Subject: [PATCH] Parse ksh nested arrays and warn about var=(( --- ShellCheck/Parser.hs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ShellCheck/Parser.hs b/ShellCheck/Parser.hs index ba0bcab..1ea40aa 100644 --- a/ShellCheck/Parser.hs +++ b/ShellCheck/Parser.hs @@ -2400,6 +2400,9 @@ prop_readAssignmentWord9c= isOk readAssignmentWord "foo= #bar" prop_readAssignmentWord10= isWarning readAssignmentWord "foo$n=42" prop_readAssignmentWord11= isOk readAssignmentWord "foo=([a]=b [c] [d]= [e f )" prop_readAssignmentWord12= isOk readAssignmentWord "a[b <<= 3 + c]='thing'" +prop_readAssignmentWord13= isOk readAssignmentWord "var=( (1 2) (3 4) )" +prop_readAssignmentWord14= isOk readAssignmentWord "var=( 1 [2]=(3 4) )" +prop_readAssignmentWord15= isOk readAssignmentWord "var=(1 [2]=(3 4))" readAssignmentWord = readAssignmentWordExt True readWellFormedAssignment = readAssignmentWordExt False readAssignmentWordExt lenient = try $ do @@ -2459,7 +2462,11 @@ readArrayIndex = do readArray :: Monad m => SCParser m Token readArray = called "array assignment" $ do id <- getNextId + opening <- getPosition char '(' + optional $ do + lookAhead $ char '(' + parseProblemAt opening ErrorC 1116 "Missing $ on a $((..)) expression? (or use ( ( for arrays)." allspacing words <- readElement `reluctantlyTill` char ')' char ')' <|> fail "Expected ) to close array assignment" @@ -2472,9 +2479,9 @@ readArray = called "array assignment" $ do x <- many1 readArrayIndex char '=' return x - value <- readNormalWord <|> nothing + value <- readRegular <|> nothing return $ T_IndexedElement id index value - readRegular = readNormalWord + readRegular = readArray <|> readNormalWord nothing = do id <- getNextId