...................... ---------------------------------------------------------------------- Ran 22 tests in 0.006s OK 7 --- echo \" \\ hi` --- (token id:Id.Backtick_Other val:'echo ' span_id:0) (token id:Id.Backtick_Quoted val:'\\"' span_id:1) (token id:Id.Backtick_Other val:' ' span_id:2) (token id:Id.Backtick_Quoted val:'\\\\' span_id:3) (token id:Id.Backtick_Other val:' hi' span_id:4) (token id:Id.Backtick_Right val:'`' span_id:5) (token id:Id.Eof_Real val:'' span_id:6) --- ` --- (token id:Id.Backtick_Right val:'`' span_id:0) (token id:Id.Eof_Real val:'' span_id:1) --- --- (token id:Id.Eof_Real val:'' span_id:0) (token id:Id.Char_Literals val:'foo bar' span_id:0) (token id:Id.Char_OneChar val:'\\n' span_id:1) --- @[ ] --- (token id:Id.Left_AtBracket val:'@[' span_id:0) (token id:Id.Ignored_Space val:' ' span_id:1) (token id:Id.Op_RBracket val:']' span_id:2) (token id:Id.Eof_Real val:'' span_id:3) --- hello %s\n --- (token id:Id.Char_Literals val:'hello ' span_id:0) (token id:Id.Format_Percent val:'%' span_id:1) (token id:Id.Char_Literals val:s span_id:2) (token id:Id.Char_OneChar val:'\\n' span_id:3) (token id:Id.Eof_Real val:'' span_id:4) --- %% percent %%\377 --- (token id:Id.Format_EscapedPercent val:'%%' span_id:0) (token id:Id.Char_Literals val:' percent ' span_id:1) (token id:Id.Format_EscapedPercent val:'%%' span_id:2) (token id:Id.Char_Octal3 val:'\\377' span_id:3) (token id:Id.Eof_Real val:'' span_id:4) --- -3.3f --- (token id:Id.Format_Flag val:- span_id:0) (token id:Id.Format_Num val:3 span_id:1) (token id:Id.Format_Dot val:. span_id:2) (token id:Id.Format_Num val:3 span_id:3) (token id:Id.Format_Type val:f span_id:4) (token id:Id.Eof_Real val:'' span_id:5) --- 03d --- (token id:Id.Format_Flag val:0 span_id:0) (token id:Id.Format_Num val:3 span_id:1) (token id:Id.Format_Type val:d span_id:2) (token id:Id.Eof_Real val:'' span_id:3) (token id:Id.Left_SingleQuoteRaw val:"'" span_id:0) [(293, 'a'), (294, '..'), (293, 'z')] [(292, '100'), (294, '..'), (292, '300')] [(292, '-300'), (294, '..'), (292, '-100'), (294, '..'), (292, '1')] [(292, '1'), (295, '.'), (292, '3')] [(293, 'a'), (293, 'a')] [(102, 'newline '), (95, '\\n'), (102, ' NUL '), (95, '\\0'), (102, ' octal '), (99, '\\0377'), (102, ' hex '), (97, '\\x00')] [(102, 'unicode '), (100, '\\u0065'), (102, ' '), (101, '\\U00000065')] [(103, '\\'), (102, 'd '), (95, '\\e'), (102, ' '), (95, '\\f'), (102, ' '), (103, '\\'), (102, 'g')] [(42, '['), (42, '!'), (42, 'abc]')] [(42, '${'), (42, '!'), (42, 'indirect}')] [(42, '$'), (42, '!'), (42, 'x')] [(42, '!'), (42, '(foo|bar)')] [(42, 'echo hi')] [(42, 'echo '), (39, '!!'), (42, ' '), (39, '!*'), (42, ' '), (39, '!^'), (42, ' '), (39, '!$')] [(42, 'echo '), (42, '\\!'), (42, '!')] [(42, 'echo '), (40, '!3'), (42, '...')] [(42, 'echo '), (40, '!-5'), (42, '...')] [(42, 'echo '), (41, '!x/foo.py '), (42, 'bar')] --- [(42, 'echo '), (42, "'!!'"), (42, ' $'), (42, "'!!'"), (42, ' ')] [(42, 'echo '), (42, "'!! ")] [(42, 'echo '), (42, "\\'"), (42, ' '), (39, '!!'), (42, ' ')] [(290, 'foo')] [(286, '\\h'), (290, ' '), (286, '\\w'), (290, ' '), (286, '\\$')] P '[^\\\\\\0]+'