squawk-syntax 2.53.0

Linter for Postgres migrations & SQL
Documentation
---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/unicode_escape_string.sql
---
SOURCE_FILE@0..507
  COMMENT@0..5 "-- ok"
  WHITESPACE@5..6 "\n"
  SELECT@6..31
    SELECT_CLAUSE@6..30
      SELECT_KW@6..12 "select"
      WHITESPACE@12..13 " "
      TARGET_LIST@13..30
        TARGET@13..30
          LITERAL@13..30
            UNICODE_ESC_STRING@13..30 "U&'\\0061\\+000061'"
    SEMICOLON@30..31 ";"
  WHITESPACE@31..32 "\n"
  SELECT@32..46
    SELECT_CLAUSE@32..45
      SELECT_KW@32..38 "select"
      WHITESPACE@38..39 " "
      TARGET_LIST@39..45
        TARGET@39..45
          LITERAL@39..45
            UNICODE_ESC_STRING@39..45 "U&'\\\\'"
    SEMICOLON@45..46 ";"
  WHITESPACE@46..47 "\n"
  SELECT@47..80
    SELECT_CLAUSE@47..79
      SELECT_KW@47..53 "select"
      WHITESPACE@53..54 " "
      TARGET_LIST@54..79
        TARGET@54..79
          LITERAL@54..79
            UNICODE_ESC_STRING@54..67 "U&'ok: !0061'"
            WHITESPACE@67..68 " "
            UESCAPE_KW@68..75 "UESCAPE"
            WHITESPACE@75..76 " "
            STRING@76..79 "'!'"
    SEMICOLON@79..80 ";"
  WHITESPACE@80..81 "\n"
  SELECT@81..107
    SELECT_CLAUSE@81..106
      SELECT_KW@81..87 "select"
      WHITESPACE@87..88 " "
      TARGET_LIST@88..106
        TARGET@88..106
          LITERAL@88..106
            UNICODE_ESC_STRING@88..94 "U&' \\'"
            WHITESPACE@94..95 " "
            UESCAPE_KW@95..102 "UESCAPE"
            WHITESPACE@102..103 " "
            STRING@103..106 "'!'"
    SEMICOLON@106..107 ";"
  WHITESPACE@107..109 "\n\n"
  COMMENT@109..118 "-- errors"
  WHITESPACE@118..119 "\n"
  SELECT@119..135
    SELECT_CLAUSE@119..134
      SELECT_KW@119..125 "select"
      WHITESPACE@125..126 " "
      TARGET_LIST@126..134
        TARGET@126..134
          LITERAL@126..134
            UNICODE_ESC_STRING@126..134 "U&'\\006'"
    SEMICOLON@134..135 ";"
  WHITESPACE@135..136 "\n"
  SELECT@136..154
    SELECT_CLAUSE@136..153
      SELECT_KW@136..142 "select"
      WHITESPACE@142..143 " "
      TARGET_LIST@143..153
        TARGET@143..153
          LITERAL@143..153
            UNICODE_ESC_STRING@143..153 "U&'\\+0061'"
    SEMICOLON@153..154 ";"
  WHITESPACE@154..155 "\n"
  SELECT@155..189
    SELECT_CLAUSE@155..188
      SELECT_KW@155..161 "select"
      WHITESPACE@161..162 " "
      TARGET_LIST@162..188
        TARGET@162..188
          LITERAL@162..188
            UNICODE_ESC_STRING@162..176 "U&'wrong: \\06'"
            WHITESPACE@176..177 " "
            UESCAPE_KW@177..184 "UESCAPE"
            WHITESPACE@184..185 " "
            STRING@185..188 "'\\'"
    SEMICOLON@188..189 ";"
  WHITESPACE@189..190 "\n"
  SELECT@190..225
    SELECT_CLAUSE@190..224
      SELECT_KW@190..196 "select"
      WHITESPACE@196..197 " "
      TARGET_LIST@197..224
        TARGET@197..224
          LITERAL@197..224
            UNICODE_ESC_STRING@197..212 "U&'wrong: !061'"
            WHITESPACE@212..213 " "
            UESCAPE_KW@213..220 "UESCAPE"
            WHITESPACE@220..221 " "
            STRING@221..224 "'!'"
    SEMICOLON@224..225 ";"
  WHITESPACE@225..226 "\n"
  SELECT@226..261
    SELECT_CLAUSE@226..260
      SELECT_KW@226..232 "select"
      WHITESPACE@232..233 " "
      TARGET_LIST@233..260
        TARGET@233..260
          LITERAL@233..260
            UNICODE_ESC_STRING@233..260 "U&'many: \\061 \\+0061  ..."
    SEMICOLON@260..261 ";"
  WHITESPACE@261..262 "\n"
  SELECT@262..281
    SELECT_CLAUSE@262..280
      SELECT_KW@262..268 "select"
      WHITESPACE@268..269 " "
      TARGET_LIST@269..280
        TARGET@269..280
          LITERAL@269..280
            UNICODE_ESC_STRING@269..280 "U&'\\D800\\\\'"
    SEMICOLON@280..281 ";"
  WHITESPACE@281..282 "\n"
  SELECT@282..309
    SELECT_CLAUSE@282..308
      SELECT_KW@282..288 "select"
      WHITESPACE@288..289 " "
      TARGET_LIST@289..308
        TARGET@289..308
          LITERAL@289..308
            UNICODE_ESC_STRING@289..308 "U&'\\D800\\D801\\DC00'"
    SEMICOLON@308..309 ";"
  WHITESPACE@309..310 "\n"
  SELECT@310..324
    SELECT_CLAUSE@310..323
      SELECT_KW@310..316 "select"
      WHITESPACE@316..317 " "
      TARGET_LIST@317..323
        TARGET@317..323
          LITERAL@317..323
            UNICODE_ESC_STRING@317..323 "U&' \\'"
    SEMICOLON@323..324 ";"
  WHITESPACE@324..325 "\n"
  SELECT@325..353
    SELECT_CLAUSE@325..352
      SELECT_KW@325..331 "select"
      WHITESPACE@331..332 " "
      TARGET_LIST@332..352
        TARGET@332..352
          LITERAL@332..352
            UNICODE_ESC_STRING@332..341 "U&'error'"
            WHITESPACE@341..342 " "
            UESCAPE_KW@342..349 "UESCAPE"
            WHITESPACE@349..350 " "
            STRING@350..352 "''"
    SEMICOLON@352..353 ";"
  WHITESPACE@353..354 "\n"
  SELECT@354..383
    SELECT_CLAUSE@354..382
      SELECT_KW@354..360 "select"
      WHITESPACE@360..361 " "
      TARGET_LIST@361..382
        TARGET@361..382
          LITERAL@361..382
            UNICODE_ESC_STRING@361..370 "U&'error'"
            WHITESPACE@370..371 " "
            UESCAPE_KW@371..378 "UESCAPE"
            WHITESPACE@378..379 " "
            STRING@379..382 "' '"
    SEMICOLON@382..383 ";"
  WHITESPACE@383..384 "\n"
  SELECT@384..413
    SELECT_CLAUSE@384..412
      SELECT_KW@384..390 "select"
      WHITESPACE@390..391 " "
      TARGET_LIST@391..412
        TARGET@391..412
          LITERAL@391..412
            UNICODE_ESC_STRING@391..400 "U&'error'"
            WHITESPACE@400..401 " "
            UESCAPE_KW@401..408 "UESCAPE"
            WHITESPACE@408..409 " "
            STRING@409..412 "'+'"
    SEMICOLON@412..413 ";"
  WHITESPACE@413..414 "\n"
  SELECT@414..443
    SELECT_CLAUSE@414..442
      SELECT_KW@414..420 "select"
      WHITESPACE@420..421 " "
      TARGET_LIST@421..442
        TARGET@421..442
          LITERAL@421..442
            UNICODE_ESC_STRING@421..430 "U&'error'"
            WHITESPACE@430..431 " "
            UESCAPE_KW@431..438 "UESCAPE"
            WHITESPACE@438..439 " "
            STRING@439..442 "'A'"
    SEMICOLON@442..443 ";"
  WHITESPACE@443..444 "\n"
  SELECT@444..474
    SELECT_CLAUSE@444..473
      SELECT_KW@444..450 "select"
      WHITESPACE@450..451 " "
      TARGET_LIST@451..473
        TARGET@451..473
          LITERAL@451..473
            UNICODE_ESC_STRING@451..460 "U&'error'"
            WHITESPACE@460..461 " "
            UESCAPE_KW@461..468 "UESCAPE"
            WHITESPACE@468..469 " "
            STRING@469..473 "'é'"
    SEMICOLON@473..474 ";"
  WHITESPACE@474..475 "\n"
  SELECT@475..506
    SELECT_CLAUSE@475..505
      SELECT_KW@475..481 "select"
      WHITESPACE@481..482 " "
      TARGET_LIST@482..505
        TARGET@482..505
          LITERAL@482..505
            UNICODE_ESC_STRING@482..491 "U&'error'"
            WHITESPACE@491..492 " "
            UESCAPE_KW@492..499 "UESCAPE"
            WHITESPACE@499..500 " "
            STRING@500..505 "'foo'"
    SEMICOLON@505..506 ";"
  WHITESPACE@506..507 "\n"

error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
  ╭▸ 
8 │ select U&'\006';
  ╰╴          ━━━━
error[syntax-error]: Unicode escape requires 6 hex digits: \+XXXXXX
  ╭▸ 
9 │ select U&'\+0061';
  ╰╴          ━━━━━━
error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
   ╭▸ 
10 │ select U&'wrong: \06' UESCAPE '\';
   ╰╴                 ━━━
error[syntax-error]: Unicode escape requires 4 hex digits: !XXXX
   ╭▸ 
11 │ select U&'wrong: !061' UESCAPE '!';
   ╰╴                 ━━━━
error[syntax-error]: Unicode escape requires 4 hex digits: \XXXX
   ╭▸ 
12 │ select U&'many: \061 \+0061 \zzzz';
   ╰╴                ━━━━
error[syntax-error]: Unicode escape requires 6 hex digits: \+XXXXXX
   ╭▸ 
12 │ select U&'many: \061 \+0061 \zzzz';
   ╰╴                     ━━━━━━
error[syntax-error]: Invalid Unicode escape sequence
   ╭▸ 
12 │ select U&'many: \061 \+0061 \zzzz';
   ╰╴                            ━━
error[syntax-error]: Invalid Unicode surrogate pair
   ╭▸ 
13 │ select U&'\D800\\';
   ╰╴          ━━━━━
error[syntax-error]: Invalid Unicode surrogate pair
   ╭▸ 
14 │ select U&'\D800\D801\DC00';
   ╰╴          ━━━━━━━━━━
error[syntax-error]: Invalid Unicode surrogate pair
   ╭▸ 
14 │ select U&'\D800\D801\DC00';
   ╰╴                    ━━━━━
error[syntax-error]: Invalid Unicode escape sequence
   ╭▸ 
15 │ select U&' \';
   ╰╴           ━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
16 │ select U&'error' UESCAPE '';
   ╰╴                         ━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
17 │ select U&'error' UESCAPE ' ';
   ╰╴                         ━━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
18 │ select U&'error' UESCAPE '+';
   ╰╴                         ━━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
19 │ select U&'error' UESCAPE 'A';
   ╰╴                         ━━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
20 │ select U&'error' UESCAPE 'é';
   ╰╴                         ━━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
21 │ select U&'error' UESCAPE 'foo';
   ╰╴                         ━━━━━