squawk-syntax 2.55.0

Linter for Postgres migrations & SQL
Documentation
---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_syntax/test_data/validation/unicode_escape_ident.sql
---
SOURCE_FILE@0..489
  COMMENT@0..5 "-- ok"
  WHITESPACE@5..6 "\n"
  SELECT@6..33
    SELECT_CLAUSE@6..32
      SELECT_KW@6..12 "select"
      WHITESPACE@12..13 " "
      TARGET_LIST@13..32
        TARGET@13..32
          NAME_REF@13..32
            IDENT@13..32 "U&\"d\\0061t\\+000061\""
    SEMICOLON@32..33 ";"
  WHITESPACE@33..34 "\n"
  SELECT@34..48
    SELECT_CLAUSE@34..47
      SELECT_KW@34..40 "select"
      WHITESPACE@40..41 " "
      TARGET_LIST@41..47
        TARGET@41..47
          NAME_REF@41..47
            IDENT@41..47 "U&\"\\\\\""
    SEMICOLON@47..48 ";"
  WHITESPACE@48..49 "\n"
  SELECT@49..82
    SELECT_CLAUSE@49..81
      SELECT_KW@49..55 "select"
      WHITESPACE@55..56 " "
      TARGET_LIST@56..81
        TARGET@56..81
          NAME_REF@56..81
            IDENT@56..69 "U&\"ok: !0061\""
            WHITESPACE@69..70 " "
            UESCAPE_KW@70..77 "UESCAPE"
            WHITESPACE@77..78 " "
            STRING@78..81 "'!'"
    SEMICOLON@81..82 ";"
  WHITESPACE@82..83 "\n"
  SELECT@83..109
    SELECT_CLAUSE@83..108
      SELECT_KW@83..89 "select"
      WHITESPACE@89..90 " "
      TARGET_LIST@90..108
        TARGET@90..108
          NAME_REF@90..108
            IDENT@90..96 "U&\" \\\""
            WHITESPACE@96..97 " "
            UESCAPE_KW@97..104 "UESCAPE"
            WHITESPACE@104..105 " "
            STRING@105..108 "'!'"
    SEMICOLON@108..109 ";"
  WHITESPACE@109..111 "\n\n"
  COMMENT@111..120 "-- errors"
  WHITESPACE@120..121 "\n"
  SELECT@121..137
    SELECT_CLAUSE@121..136
      SELECT_KW@121..127 "select"
      WHITESPACE@127..128 " "
      TARGET_LIST@128..136
        TARGET@128..136
          NAME_REF@128..136
            IDENT@128..136 "U&\"\\006\""
    SEMICOLON@136..137 ";"
  WHITESPACE@137..138 "\n"
  SELECT@138..156
    SELECT_CLAUSE@138..155
      SELECT_KW@138..144 "select"
      WHITESPACE@144..145 " "
      TARGET_LIST@145..155
        TARGET@145..155
          NAME_REF@145..155
            IDENT@145..155 "U&\"\\+0061\""
    SEMICOLON@155..156 ";"
  WHITESPACE@156..157 "\n"
  SELECT@157..191
    SELECT_CLAUSE@157..190
      SELECT_KW@157..163 "select"
      WHITESPACE@163..164 " "
      TARGET_LIST@164..190
        TARGET@164..190
          NAME_REF@164..190
            IDENT@164..178 "U&\"wrong: \\06\""
            WHITESPACE@178..179 " "
            UESCAPE_KW@179..186 "UESCAPE"
            WHITESPACE@186..187 " "
            STRING@187..190 "'\\'"
    SEMICOLON@190..191 ";"
  WHITESPACE@191..192 "\n"
  SELECT@192..227
    SELECT_CLAUSE@192..226
      SELECT_KW@192..198 "select"
      WHITESPACE@198..199 " "
      TARGET_LIST@199..226
        TARGET@199..226
          NAME_REF@199..226
            IDENT@199..214 "U&\"wrong: !061\""
            WHITESPACE@214..215 " "
            UESCAPE_KW@215..222 "UESCAPE"
            WHITESPACE@222..223 " "
            STRING@223..226 "'!'"
    SEMICOLON@226..227 ";"
  WHITESPACE@227..228 "\n"
  SELECT@228..263
    SELECT_CLAUSE@228..262
      SELECT_KW@228..234 "select"
      WHITESPACE@234..235 " "
      TARGET_LIST@235..262
        TARGET@235..262
          NAME_REF@235..262
            IDENT@235..262 "U&\"many: \\061 \\+0061  ..."
    SEMICOLON@262..263 ";"
  WHITESPACE@263..264 "\n"
  SELECT@264..291
    SELECT_CLAUSE@264..290
      SELECT_KW@264..270 "select"
      WHITESPACE@270..271 " "
      TARGET_LIST@271..290
        TARGET@271..290
          NAME_REF@271..290
            IDENT@271..290 "U&\"\\D800\\D801\\DC00\""
    SEMICOLON@290..291 ";"
  WHITESPACE@291..292 "\n"
  SELECT@292..306
    SELECT_CLAUSE@292..305
      SELECT_KW@292..298 "select"
      WHITESPACE@298..299 " "
      TARGET_LIST@299..305
        TARGET@299..305
          NAME_REF@299..305
            IDENT@299..305 "U&\" \\\""
    SEMICOLON@305..306 ";"
  WHITESPACE@306..307 "\n"
  SELECT@307..335
    SELECT_CLAUSE@307..334
      SELECT_KW@307..313 "select"
      WHITESPACE@313..314 " "
      TARGET_LIST@314..334
        TARGET@314..334
          NAME_REF@314..334
            IDENT@314..323 "U&\"error\""
            WHITESPACE@323..324 " "
            UESCAPE_KW@324..331 "UESCAPE"
            WHITESPACE@331..332 " "
            STRING@332..334 "''"
    SEMICOLON@334..335 ";"
  WHITESPACE@335..336 "\n"
  SELECT@336..365
    SELECT_CLAUSE@336..364
      SELECT_KW@336..342 "select"
      WHITESPACE@342..343 " "
      TARGET_LIST@343..364
        TARGET@343..364
          NAME_REF@343..364
            IDENT@343..352 "U&\"error\""
            WHITESPACE@352..353 " "
            UESCAPE_KW@353..360 "UESCAPE"
            WHITESPACE@360..361 " "
            STRING@361..364 "' '"
    SEMICOLON@364..365 ";"
  WHITESPACE@365..366 "\n"
  SELECT@366..395
    SELECT_CLAUSE@366..394
      SELECT_KW@366..372 "select"
      WHITESPACE@372..373 " "
      TARGET_LIST@373..394
        TARGET@373..394
          NAME_REF@373..394
            IDENT@373..382 "U&\"error\""
            WHITESPACE@382..383 " "
            UESCAPE_KW@383..390 "UESCAPE"
            WHITESPACE@390..391 " "
            STRING@391..394 "'+'"
    SEMICOLON@394..395 ";"
  WHITESPACE@395..396 "\n"
  SELECT@396..425
    SELECT_CLAUSE@396..424
      SELECT_KW@396..402 "select"
      WHITESPACE@402..403 " "
      TARGET_LIST@403..424
        TARGET@403..424
          NAME_REF@403..424
            IDENT@403..412 "U&\"error\""
            WHITESPACE@412..413 " "
            UESCAPE_KW@413..420 "UESCAPE"
            WHITESPACE@420..421 " "
            STRING@421..424 "'A'"
    SEMICOLON@424..425 ";"
  WHITESPACE@425..426 "\n"
  SELECT@426..456
    SELECT_CLAUSE@426..455
      SELECT_KW@426..432 "select"
      WHITESPACE@432..433 " "
      TARGET_LIST@433..455
        TARGET@433..455
          NAME_REF@433..455
            IDENT@433..442 "U&\"error\""
            WHITESPACE@442..443 " "
            UESCAPE_KW@443..450 "UESCAPE"
            WHITESPACE@450..451 " "
            STRING@451..455 "'é'"
    SEMICOLON@455..456 ";"
  WHITESPACE@456..457 "\n"
  SELECT@457..488
    SELECT_CLAUSE@457..487
      SELECT_KW@457..463 "select"
      WHITESPACE@463..464 " "
      TARGET_LIST@464..487
        TARGET@464..487
          NAME_REF@464..487
            IDENT@464..473 "U&\"error\""
            WHITESPACE@473..474 " "
            UESCAPE_KW@474..481 "UESCAPE"
            WHITESPACE@481..482 " "
            STRING@482..487 "'foo'"
    SEMICOLON@487..488 ";"
  WHITESPACE@488..489 "\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\D801\DC00";
   ╰╴          ━━━━━━━━━━
error[syntax-error]: Invalid Unicode surrogate pair
   ╭▸ 
13 │ select U&"\D800\D801\DC00";
   ╰╴                    ━━━━━
error[syntax-error]: Invalid Unicode escape sequence
   ╭▸ 
14 │ select U&" \";
   ╰╴           ━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
15 │ select U&"error" UESCAPE '';
   ╰╴                         ━━
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 'A';
   ╰╴                         ━━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
19 │ select U&"error" UESCAPE 'é';
   ╰╴                         ━━━
error[syntax-error]: Invalid unicode escape character
   ╭▸ 
20 │ select U&"error" UESCAPE 'foo';
   ╰╴                         ━━━━━