Skip to content

Commit c2950ff

Browse files
committed
feat(decodeEscapes): add missed ANSI-C quoting
except for `\c𝑥` (#3457)
1 parent e943cfe commit c2950ff

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

src/ShellCheck/ASTLib.hs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,13 @@ prop_getLiteralString10 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\1234"
386386
prop_getLiteralString11 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\1") == Just "\1"
387387
prop_getLiteralString12 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\12") == Just "\o12"
388388
prop_getLiteralString13 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\123") == Just "\o123"
389+
prop_getLiteralString14 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\e[1mfoo\\E[0mbar") == Just "\ESC[1mfoo\ESC[0mbar"
390+
prop_getLiteralString15 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\?") == Just "?"
391+
prop_getLiteralString16 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\u2F") == Just "/"
392+
prop_getLiteralString17 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\u100") == Just "Ā"
393+
prop_getLiteralString18 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\u1d00") == Just ""
394+
prop_getLiteralString19 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\u1D56C") == Just "ᵖC"
395+
prop_getLiteralString20 = getLiteralString (T_DollarSingleQuoted (Id 0) "\\U1D56C") == Just "𝕬"
389396

390397
-- Maybe get the literal value of a token, using a custom function
391398
-- to map unrecognized Tokens into strings.
@@ -409,18 +416,28 @@ getLiteralStringExt more = g
409416
'a' -> '\a' : rest
410417
'b' -> '\b' : rest
411418
'e' -> '\x1B' : rest
419+
'E' -> '\x1B' : rest
412420
'f' -> '\f' : rest
413421
'n' -> '\n' : rest
414422
'r' -> '\r' : rest
415423
't' -> '\t' : rest
416424
'v' -> '\v' : rest
425+
'\\' -> '\\' : rest
417426
'\'' -> '\'' : rest
418427
'"' -> '"' : rest
419-
'\\' -> '\\' : rest
428+
'?' -> '?' : rest
420429
'x' ->
421430
case readHex (take 2 cs) of
422431
[(n, s)] -> chr n : s ++ decodeEscapes (drop 2 cs)
423432
_ -> '\\' : 'x' : rest
433+
'u' ->
434+
case readHex (take 4 cs) of
435+
[(n, s)] -> chr n : s ++ decodeEscapes (drop 4 cs)
436+
_ -> '\\' : 'x' : rest
437+
'U' ->
438+
case readHex (take 8 cs) of
439+
[(n, s)] -> chr n : s ++ decodeEscapes (drop 8 cs)
440+
_ -> '\\' : 'x' : rest
424441
_ ->
425442
case readOct (c:take 2 cs) of
426443
[(n, s)] -> chr n : s ++ decodeEscapes (drop 2 cs)

0 commit comments

Comments
 (0)