squawk-syntax 2.66.0

Linter for Postgres migrations & SQL
Documentation
---
source: crates/squawk_syntax/src/test.rs
input_file: crates/squawk_parser/tests/data/plpgsql/ok/loop_stmt.sql
---
PLPGSQL@0..452
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..451
    PLPGSQL_DECLARE_SECTION@1..22
      DECLARE_KW@1..8 "declare"
      WHITESPACE@8..11 "\n  "
      PLPGSQL_VAR_DECL@11..22
        PLPGSQL_VAR_NAME@11..12
          IDENT@11..12 "i"
        WHITESPACE@12..13 " "
        PATH_TYPE@13..16
          PATH_REF@13..16
            PATH_SEGMENT_REF@13..16
              INT_KW@13..16 "int"
        WHITESPACE@16..17 " "
        PLPGSQL_VAR_INIT@17..21
          COLON_EQ@17..19 ":="
          WHITESPACE@19..20 " "
          PLPGSQL_EXPR@20..21
            TARGET_LIST@20..21
              TARGET@20..21
                LITERAL@20..21
                  INT_NUMBER@20..21 "0"
        SEMICOLON@21..22 ";"
    WHITESPACE@22..23 "\n"
    BEGIN_KW@23..28 "begin"
    WHITESPACE@28..31 "\n  "
    PLPGSQL_BODY@31..447
      PLPGSQL_LOOP_STMT@31..57
        LOOP_KW@31..35 "loop"
        WHITESPACE@35..40 "\n    "
        PLPGSQL_BODY@40..45
          PLPGSQL_EXIT_STMT@40..45
            EXIT_KW@40..44 "exit"
            SEMICOLON@44..45 ";"
        WHITESPACE@45..48 "\n  "
        END_KW@48..51 "end"
        WHITESPACE@51..52 " "
        LOOP_KW@52..56 "loop"
        SEMICOLON@56..57 ";"
      WHITESPACE@57..61 "\n\n  "
      PLPGSQL_LOOP_STMT@61..138
        LOOP_KW@61..65 "loop"
        WHITESPACE@65..70 "\n    "
        PLPGSQL_BODY@70..126
          PLPGSQL_EXIT_STMT@70..87
            EXIT_KW@70..74 "exit"
            WHITESPACE@74..75 " "
            PLPGSQL_EXIT_WHEN@75..86
              WHEN_KW@75..79 "when"
              WHITESPACE@79..80 " "
              PLPGSQL_EXPR@80..86
                TARGET_LIST@80..86
                  TARGET@80..86
                    BIN_EXPR@80..86
                      NAME_REF@80..81
                        IDENT@80..81 "i"
                      WHITESPACE@81..82 " "
                      R_ANGLE@82..83 ">"
                      WHITESPACE@83..84 " "
                      LITERAL@84..86
                        INT_NUMBER@84..86 "10"
            SEMICOLON@86..87 ";"
          WHITESPACE@87..92 "\n    "
          PLPGSQL_CONTINUE_STMT@92..112
            CONTINUE_KW@92..100 "continue"
            WHITESPACE@100..101 " "
            PLPGSQL_EXIT_WHEN@101..111
              WHEN_KW@101..105 "when"
              WHITESPACE@105..106 " "
              PLPGSQL_EXPR@106..111
                TARGET_LIST@106..111
                  TARGET@106..111
                    BIN_EXPR@106..111
                      NAME_REF@106..107
                        IDENT@106..107 "i"
                      WHITESPACE@107..108 " "
                      EQ@108..109 "="
                      WHITESPACE@109..110 " "
                      LITERAL@110..111
                        INT_NUMBER@110..111 "2"
            SEMICOLON@111..112 ";"
          WHITESPACE@112..117 "\n    "
          PLPGSQL_CONTINUE_STMT@117..126
            CONTINUE_KW@117..125 "continue"
            SEMICOLON@125..126 ";"
        WHITESPACE@126..129 "\n  "
        END_KW@129..132 "end"
        WHITESPACE@132..133 " "
        LOOP_KW@133..137 "loop"
        SEMICOLON@137..138 ";"
      WHITESPACE@138..142 "\n\n  "
      PLPGSQL_WHILE_STMT@142..181
        WHILE_KW@142..147 "while"
        WHITESPACE@147..148 " "
        PLPGSQL_EXPR@148..154
          TARGET_LIST@148..154
            TARGET@148..154
              BIN_EXPR@148..154
                NAME_REF@148..149
                  IDENT@148..149 "i"
                WHITESPACE@149..150 " "
                L_ANGLE@150..151 "<"
                WHITESPACE@151..152 " "
                LITERAL@152..154
                  INT_NUMBER@152..154 "10"
        WHITESPACE@154..155 " "
        LOOP_KW@155..159 "loop"
        WHITESPACE@159..164 "\n    "
        PLPGSQL_BODY@164..169
          PLPGSQL_NULL_STMT@164..169
            NULL_KW@164..168 "null"
            SEMICOLON@168..169 ";"
        WHITESPACE@169..172 "\n  "
        END_KW@172..175 "end"
        WHITESPACE@175..176 " "
        LOOP_KW@176..180 "loop"
        SEMICOLON@180..181 ";"
      WHITESPACE@181..185 "\n\n  "
      PLPGSQL_WHILE_STMT@185..258
        WHILE_KW@185..190 "while"
        WHITESPACE@190..191 " "
        PLPGSQL_EXPR@191..231
          TARGET_LIST@191..231
            TARGET@191..231
              CASE_EXPR@191..231
                CASE_KW@191..195 "case"
                WHITESPACE@195..196 " "
                WHEN_CLAUSE_LIST@196..216
                  WHEN_CLAUSE@196..216
                    WHEN_KW@196..200 "when"
                    WHITESPACE@200..201 " "
                    BIN_EXPR@201..206
                      NAME_REF@201..202
                        IDENT@201..202 "i"
                      WHITESPACE@202..203 " "
                      EQ@203..204 "="
                      WHITESPACE@204..205 " "
                      LITERAL@205..206
                        INT_NUMBER@205..206 "1"
                    WHITESPACE@206..207 " "
                    THEN_KW@207..211 "then"
                    WHITESPACE@211..212 " "
                    LITERAL@212..216
                      TRUE_KW@212..216 "true"
                WHITESPACE@216..217 " "
                ELSE_CLAUSE@217..227
                  ELSE_KW@217..221 "else"
                  WHITESPACE@221..222 " "
                  LITERAL@222..227
                    FALSE_KW@222..227 "false"
                WHITESPACE@227..228 " "
                END_KW@228..231 "end"
        WHITESPACE@231..232 " "
        LOOP_KW@232..236 "loop"
        WHITESPACE@236..241 "\n    "
        PLPGSQL_BODY@241..246
          PLPGSQL_NULL_STMT@241..246
            NULL_KW@241..245 "null"
            SEMICOLON@245..246 ";"
        WHITESPACE@246..249 "\n  "
        END_KW@249..252 "end"
        WHITESPACE@252..253 " "
        LOOP_KW@253..257 "loop"
        SEMICOLON@257..258 ";"
      WHITESPACE@258..262 "\n\n  "
      PLPGSQL_LOOP_STMT@262..403
        PLPGSQL_LABEL@262..271
          LESS_LESS@262..264 "<<"
          PLPGSQL_LABEL_NAME@264..269
            OUTER_KW@264..269 "outer"
          GREATER_GREATER@269..271 ">>"
        WHITESPACE@271..274 "\n  "
        LOOP_KW@274..278 "loop"
        WHITESPACE@278..283 "\n    "
        PLPGSQL_BODY@283..385
          PLPGSQL_WHILE_STMT@283..385
            PLPGSQL_LABEL@283..292
              LESS_LESS@283..285 "<<"
              PLPGSQL_LABEL_NAME@285..290
                INNER_KW@285..290 "inner"
              GREATER_GREATER@290..292 ">>"
            WHITESPACE@292..297 "\n    "
            WHILE_KW@297..302 "while"
            WHITESPACE@302..303 " "
            PLPGSQL_EXPR@303..309
              TARGET_LIST@303..309
                TARGET@303..309
                  BIN_EXPR@303..309
                    NAME_REF@303..304
                      IDENT@303..304 "i"
                    WHITESPACE@304..305 " "
                    L_ANGLE@305..306 "<"
                    WHITESPACE@306..307 " "
                    LITERAL@307..309
                      INT_NUMBER@307..309 "10"
            WHITESPACE@309..310 " "
            LOOP_KW@310..314 "loop"
            WHITESPACE@314..321 "\n      "
            PLPGSQL_BODY@321..365
              PLPGSQL_CONTINUE_STMT@321..347
                CONTINUE_KW@321..329 "continue"
                WHITESPACE@329..330 " "
                PLPGSQL_LABEL_NAME_REF@330..335
                  OUTER_KW@330..335 "outer"
                WHITESPACE@335..336 " "
                PLPGSQL_EXIT_WHEN@336..346
                  WHEN_KW@336..340 "when"
                  WHITESPACE@340..341 " "
                  PLPGSQL_EXPR@341..346
                    TARGET_LIST@341..346
                      TARGET@341..346
                        BIN_EXPR@341..346
                          NAME_REF@341..342
                            IDENT@341..342 "i"
                          WHITESPACE@342..343 " "
                          EQ@343..344 "="
                          WHITESPACE@344..345 " "
                          LITERAL@345..346
                            INT_NUMBER@345..346 "2"
                SEMICOLON@346..347 ";"
              WHITESPACE@347..354 "\n      "
              PLPGSQL_EXIT_STMT@354..365
                EXIT_KW@354..358 "exit"
                WHITESPACE@358..359 " "
                PLPGSQL_LABEL_NAME_REF@359..364
                  INNER_KW@359..364 "inner"
                SEMICOLON@364..365 ";"
            WHITESPACE@365..370 "\n    "
            END_KW@370..373 "end"
            WHITESPACE@373..374 " "
            LOOP_KW@374..378 "loop"
            WHITESPACE@378..379 " "
            PLPGSQL_LABEL_NAME_REF@379..384
              INNER_KW@379..384 "inner"
            SEMICOLON@384..385 ";"
        WHITESPACE@385..388 "\n  "
        END_KW@388..391 "end"
        WHITESPACE@391..392 " "
        LOOP_KW@392..396 "loop"
        WHITESPACE@396..397 " "
        PLPGSQL_LABEL_NAME_REF@397..402
          OUTER_KW@397..402 "outer"
        SEMICOLON@402..403 ";"
      WHITESPACE@403..407 "\n\n  "
      PLPGSQL_BLOCK@407..447
        PLPGSQL_LABEL@407..414
          LESS_LESS@407..409 "<<"
          PLPGSQL_LABEL_NAME@409..412
            IDENT@409..412 "blk"
          GREATER_GREATER@412..414 ">>"
        WHITESPACE@414..417 "\n  "
        BEGIN_KW@417..422 "begin"
        WHITESPACE@422..427 "\n    "
        PLPGSQL_BODY@427..436
          PLPGSQL_EXIT_STMT@427..436
            EXIT_KW@427..431 "exit"
            WHITESPACE@431..432 " "
            PLPGSQL_LABEL_NAME_REF@432..435
              IDENT@432..435 "blk"
            SEMICOLON@435..436 ";"
        WHITESPACE@436..439 "\n  "
        END_KW@439..442 "end"
        WHITESPACE@442..443 " "
        PLPGSQL_LABEL_NAME_REF@443..446
          IDENT@443..446 "blk"
        SEMICOLON@446..447 ";"
    WHITESPACE@447..448 "\n"
    END_KW@448..451 "end"
  WHITESPACE@451..452 "\n"