mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-19 14:13:33 +08:00
Better messages for ignored backslashes like 'echo foo\n'
This commit is contained in:
@@ -422,7 +422,7 @@ readArithmeticContents =
|
|||||||
|
|
||||||
readArithTerm = readBased <|> readArithTermUnit
|
readArithTerm = readBased <|> readArithTermUnit
|
||||||
readArithTermUnit = readGroup <|> readExpansion <|> readQuoted <|> readNumber <|> readVar
|
readArithTermUnit = readGroup <|> readExpansion <|> readQuoted <|> readNumber <|> readVar
|
||||||
|
|
||||||
readQuoted = readDoubleQuoted <|> readSingleQuoted
|
readQuoted = readDoubleQuoted <|> readSingleQuoted
|
||||||
|
|
||||||
readSequence = do
|
readSequence = do
|
||||||
@@ -560,7 +560,7 @@ readNormalWordPart end = do
|
|||||||
pos <- getPosition
|
pos <- getPosition
|
||||||
lookAhead $ char '('
|
lookAhead $ char '('
|
||||||
parseProblemAt pos ErrorC "'(' is invalid here. Did you forget to escape it?"
|
parseProblemAt pos ErrorC "'(' is invalid here. Did you forget to escape it?"
|
||||||
|
|
||||||
|
|
||||||
readSpacePart = do
|
readSpacePart = do
|
||||||
id <- getNextId
|
id <- getNextId
|
||||||
@@ -691,8 +691,15 @@ readNormalEscaped = called "escaped char" $ do
|
|||||||
<|>
|
<|>
|
||||||
do
|
do
|
||||||
next <- anyChar
|
next <- anyChar
|
||||||
parseNoteAt pos WarningC $ "Did you mean \"$(printf \"\\" ++ [next] ++ "\")\"? The shell just ignores the \\ here."
|
case escapedChar next of
|
||||||
|
Just name -> parseNoteAt pos WarningC $ "\\" ++ [next] ++ " is just literal '" ++ [next] ++ "' here. For " ++ name ++ ", use \"$(printf \"\\" ++ [next] ++ "\")\"."
|
||||||
|
Nothing -> parseNoteAt pos InfoC $ "This \\" ++ [next] ++ " will be a regular '" ++ [next] ++ "' in this context."
|
||||||
return [next]
|
return [next]
|
||||||
|
where
|
||||||
|
escapedChar 'n' = Just "line feed"
|
||||||
|
escapedChar 't' = Just "tab"
|
||||||
|
escapedChar 'r' = Just "carriage return"
|
||||||
|
escapedChar _ = Nothing
|
||||||
|
|
||||||
|
|
||||||
prop_readExtglob1 = isOk readExtglob "!(*.mp3)"
|
prop_readExtglob1 = isOk readExtglob "!(*.mp3)"
|
||||||
@@ -1069,7 +1076,7 @@ readIfClause = called "if expression" $ do
|
|||||||
return $ T_IfExpression id ((condition, action):elifs) elses
|
return $ T_IfExpression id ((condition, action):elifs) elses
|
||||||
|
|
||||||
|
|
||||||
verifyNotEmptyIf s =
|
verifyNotEmptyIf s =
|
||||||
optional (do
|
optional (do
|
||||||
emptyPos <- getPosition
|
emptyPos <- getPosition
|
||||||
try . lookAhead $ (g_Fi <|> g_Elif <|> g_Else)
|
try . lookAhead $ (g_Fi <|> g_Elif <|> g_Else)
|
||||||
|
Reference in New Issue
Block a user