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/assign_stmt.sql
---
PLPGSQL@0..286
  WHITESPACE@0..1 "\n"
  PLPGSQL_BLOCK@1..285
    PLPGSQL_DECLARE_SECTION@1..31
      DECLARE_KW@1..8 "declare"
      WHITESPACE@8..11 "\n  "
      PLPGSQL_VAR_DECL@11..19
        PLPGSQL_VAR_NAME@11..12
          IDENT@11..12 "a"
        WHITESPACE@12..13 " "
        ARRAY_TYPE@13..18
          PATH_TYPE@13..16
            PATH_REF@13..16
              PATH_SEGMENT_REF@13..16
                INT_KW@13..16 "int"
          ARRAY_BOUND@16..18
            L_BRACK@16..17 "["
            R_BRACK@17..18 "]"
        SEMICOLON@18..19 ";"
      WHITESPACE@19..22 "\n  "
      PLPGSQL_VAR_DECL@22..31
        PLPGSQL_VAR_NAME@22..23
          IDENT@22..23 "r"
        WHITESPACE@23..24 " "
        PATH_TYPE@24..30
          PATH_REF@24..30
            PATH_SEGMENT_REF@24..30
              IDENT@24..30 "record"
        SEMICOLON@30..31 ";"
    WHITESPACE@31..32 "\n"
    BEGIN_KW@32..37 "begin"
    WHITESPACE@37..40 "\n  "
    PLPGSQL_BODY@40..281
      PLPGSQL_ASSIGN_STMT@40..47
        PLPGSQL_ASSIGN_TARGET@40..41
          PLPGSQL_VAR_NAME_REF@40..41
            IDENT@40..41 "x"
        WHITESPACE@41..42 " "
        COLON_EQ@42..44 ":="
        WHITESPACE@44..45 " "
        PLPGSQL_EXPR@45..46
          TARGET_LIST@45..46
            TARGET@45..46
              LITERAL@45..46
                INT_NUMBER@45..46 "1"
        SEMICOLON@46..47 ";"
      WHITESPACE@47..50 "\n  "
      PLPGSQL_ASSIGN_STMT@50..56
        PLPGSQL_ASSIGN_TARGET@50..51
          PLPGSQL_VAR_NAME_REF@50..51
            IDENT@50..51 "x"
        WHITESPACE@51..52 " "
        EQ@52..53 "="
        WHITESPACE@53..54 " "
        PLPGSQL_EXPR@54..55
          TARGET_LIST@54..55
            TARGET@54..55
              LITERAL@54..55
                INT_NUMBER@54..55 "1"
        SEMICOLON@55..56 ";"
      WHITESPACE@56..59 "\n  "
      PLPGSQL_ASSIGN_STMT@59..69
        PLPGSQL_ASSIGN_TARGET@59..63
          PLPGSQL_VAR_NAME_REF@59..60
            IDENT@59..60 "a"
          INDEX_ACCESSOR@60..63
            L_BRACK@60..61 "["
            LITERAL@61..62
              INT_NUMBER@61..62 "1"
            R_BRACK@62..63 "]"
        WHITESPACE@63..64 " "
        COLON_EQ@64..66 ":="
        WHITESPACE@66..67 " "
        PLPGSQL_EXPR@67..68
          TARGET_LIST@67..68
            TARGET@67..68
              LITERAL@67..68
                INT_NUMBER@67..68 "2"
        SEMICOLON@68..69 ";"
      WHITESPACE@69..72 "\n  "
      PLPGSQL_ASSIGN_STMT@72..93
        PLPGSQL_ASSIGN_TARGET@72..78
          PLPGSQL_VAR_NAME_REF@72..73
            IDENT@72..73 "a"
          SLICE_ACCESSOR@73..78
            L_BRACK@73..74 "["
            LITERAL@74..75
              INT_NUMBER@74..75 "1"
            COLON@75..76 ":"
            LITERAL@76..77
              INT_NUMBER@76..77 "2"
            R_BRACK@77..78 "]"
        WHITESPACE@78..79 " "
        COLON_EQ@79..81 ":="
        WHITESPACE@81..82 " "
        PLPGSQL_EXPR@82..92
          TARGET_LIST@82..92
            TARGET@82..92
              ARRAY_EXPR@82..92
                ARRAY_KW@82..87 "array"
                L_BRACK@87..88 "["
                LITERAL@88..89
                  INT_NUMBER@88..89 "1"
                COMMA@89..90 ","
                LITERAL@90..91
                  INT_NUMBER@90..91 "2"
                R_BRACK@91..92 "]"
        SEMICOLON@92..93 ";"
      WHITESPACE@93..96 "\n  "
      PLPGSQL_ASSIGN_STMT@96..121
        PLPGSQL_ASSIGN_TARGET@96..104
          PLPGSQL_VAR_NAME_REF@96..97
            IDENT@96..97 "a"
          SLICE_ACCESSOR@97..102
            L_BRACK@97..98 "["
            LITERAL@98..99
              INT_NUMBER@98..99 "1"
            COLON@99..100 ":"
            LITERAL@100..101
              INT_NUMBER@100..101 "2"
            R_BRACK@101..102 "]"
          FIELD_ACCESSOR@102..104
            DOT@102..103 "."
            COMPOSITE_FIELD_REF@103..104
              IDENT@103..104 "i"
        WHITESPACE@104..105 " "
        COLON_EQ@105..107 ":="
        WHITESPACE@107..108 " "
        PLPGSQL_EXPR@108..120
          TARGET_LIST@108..120
            TARGET@108..120
              ARRAY_EXPR@108..120
                ARRAY_KW@108..113 "array"
                L_BRACK@113..114 "["
                LITERAL@114..116
                  INT_NUMBER@114..116 "11"
                COMMA@116..117 ","
                LITERAL@117..119
                  INT_NUMBER@117..119 "12"
                R_BRACK@119..120 "]"
        SEMICOLON@120..121 ";"
      WHITESPACE@121..124 "\n  "
      PLPGSQL_ASSIGN_STMT@124..134
        PLPGSQL_ASSIGN_TARGET@124..128
          PLPGSQL_VAR_NAME_REF@124..125
            IDENT@124..125 "r"
          FIELD_ACCESSOR@125..128
            DOT@125..126 "."
            COMPOSITE_FIELD_REF@126..128
              IDENT@126..128 "f1"
        WHITESPACE@128..129 " "
        COLON_EQ@129..131 ":="
        WHITESPACE@131..132 " "
        PLPGSQL_EXPR@132..133
          TARGET_LIST@132..133
            TARGET@132..133
              LITERAL@132..133
                INT_NUMBER@132..133 "3"
        SEMICOLON@133..134 ";"
      WHITESPACE@134..137 "\n  "
      PLPGSQL_ASSIGN_STMT@137..153
        PLPGSQL_ASSIGN_TARGET@137..146
          PLPGSQL_VAR_NAME_REF@137..138
            IDENT@137..138 "r"
          FIELD_ACCESSOR@138..141
            DOT@138..139 "."
            COMPOSITE_FIELD_REF@139..141
              IDENT@139..141 "c1"
          INDEX_ACCESSOR@141..144
            L_BRACK@141..142 "["
            LITERAL@142..143
              INT_NUMBER@142..143 "1"
            R_BRACK@143..144 "]"
          FIELD_ACCESSOR@144..146
            DOT@144..145 "."
            COMPOSITE_FIELD_REF@145..146
              IDENT@145..146 "i"
        WHITESPACE@146..147 " "
        COLON_EQ@147..149 ":="
        WHITESPACE@149..150 " "
        PLPGSQL_EXPR@150..152
          TARGET_LIST@150..152
            TARGET@150..152
              LITERAL@150..152
                INT_NUMBER@150..152 "11"
        SEMICOLON@152..153 ";"
      WHITESPACE@153..156 "\n  "
      PLPGSQL_ASSIGN_STMT@156..164
        PLPGSQL_ASSIGN_TARGET@156..158
          PLPGSQL_VAR_NAME_REF@156..158
            POSITIONAL_PARAM@156..158 "$1"
        WHITESPACE@158..159 " "
        COLON_EQ@159..161 ":="
        WHITESPACE@161..162 " "
        PLPGSQL_EXPR@162..163
          TARGET_LIST@162..163
            TARGET@162..163
              LITERAL@162..163
                INT_NUMBER@162..163 "4"
        SEMICOLON@163..164 ";"
      WHITESPACE@164..167 "\n  "
      PLPGSQL_ASSIGN_STMT@167..179
        PLPGSQL_ASSIGN_TARGET@167..173
          PLPGSQL_VAR_NAME_REF@167..173
            VALUES_KW@167..173 "values"
        WHITESPACE@173..174 " "
        COLON_EQ@174..176 ":="
        WHITESPACE@176..177 " "
        PLPGSQL_EXPR@177..178
          TARGET_LIST@177..178
            TARGET@177..178
              LITERAL@177..178
                INT_NUMBER@177..178 "5"
        SEMICOLON@178..179 ";"
      WHITESPACE@179..182 "\n  "
      PLPGSQL_ASSIGN_STMT@182..195
        PLPGSQL_ASSIGN_TARGET@182..189
          PLPGSQL_VAR_NAME_REF@182..189
            IDENT@182..189 "perform"
        WHITESPACE@189..190 " "
        COLON_EQ@190..192 ":="
        WHITESPACE@192..193 " "
        PLPGSQL_EXPR@193..194
          TARGET_LIST@193..194
            TARGET@193..194
              LITERAL@193..194
                INT_NUMBER@193..194 "6"
        SEMICOLON@194..195 ";"
      WHITESPACE@195..198 "\n  "
      PLPGSQL_ASSIGN_STMT@198..244
        PLPGSQL_ASSIGN_TARGET@198..199
          PLPGSQL_VAR_NAME_REF@198..199
            IDENT@198..199 "x"
        WHITESPACE@199..200 " "
        COLON_EQ@200..202 ":="
        WHITESPACE@202..203 " "
        PLPGSQL_EXPR@203..243
          TARGET_LIST@203..243
            TARGET@203..243
              CASE_EXPR@203..243
                CASE_KW@203..207 "case"
                WHITESPACE@207..208 " "
                WHEN_CLAUSE_LIST@208..230
                  WHEN_CLAUSE@208..230
                    WHEN_KW@208..212 "when"
                    WHITESPACE@212..213 " "
                    BIN_EXPR@213..221
                      FIELD_EXPR@213..217
                        NAME_REF@213..214
                          IDENT@213..214 "r"
                        DOT@214..215 "."
                        NAME_REF@215..217
                          IDENT@215..217 "f1"
                      WHITESPACE@217..218 " "
                      EQ@218..219 "="
                      WHITESPACE@219..220 " "
                      LITERAL@220..221
                        INT_NUMBER@220..221 "1"
                    WHITESPACE@221..222 " "
                    THEN_KW@222..226 "then"
                    WHITESPACE@226..227 " "
                    LITERAL@227..230
                      STRING@227..230 "'a'"
                WHITESPACE@230..231 " "
                ELSE_CLAUSE@231..239
                  ELSE_KW@231..235 "else"
                  WHITESPACE@235..236 " "
                  LITERAL@236..239
                    STRING@236..239 "'b'"
                WHITESPACE@239..240 " "
                END_KW@240..243 "end"
        SEMICOLON@243..244 ";"
      WHITESPACE@244..247 "\n  "
      PLPGSQL_ASSIGN_STMT@247..281
        PLPGSQL_ASSIGN_TARGET@247..248
          PLPGSQL_VAR_NAME_REF@247..248
            IDENT@247..248 "x"
        WHITESPACE@248..249 " "
        COLON_EQ@249..251 ":="
        WHITESPACE@251..252 " "
        PLPGSQL_EXPR@252..280
          TARGET_LIST@252..280
            TARGET@252..280
              PAREN_EXPR@252..280
                L_PAREN@252..253 "("
                SELECT@253..279
                  SELECT_CLAUSE@253..267
                    SELECT_KW@253..259 "select"
                    WHITESPACE@259..260 " "
                    TARGET_LIST@260..267
                      TARGET@260..267
                        CALL_EXPR@260..267
                          NAME_REF@260..263
                            IDENT@260..263 "max"
                          ARG_LIST@263..267
                            L_PAREN@263..264 "("
                            ARG@264..266
                              NAME_REF@264..266
                                IDENT@264..266 "f1"
                            R_PAREN@266..267 ")"
                  WHITESPACE@267..268 " "
                  FROM_CLAUSE@268..279
                    FROM_KW@268..272 "from"
                    WHITESPACE@272..273 " "
                    RELATION_FROM_ITEM@273..279
                      RELATION_NAME_REF@273..279
                        PATH_REF@273..279
                          PATH_SEGMENT_REF@273..279
                            IDENT@273..279 "onecol"
                R_PAREN@279..280 ")"
        SEMICOLON@280..281 ";"
    WHITESPACE@281..282 "\n"
    END_KW@282..285 "end"
  WHITESPACE@285..286 "\n"