crisp-parser 1.8.0

Crisp parser — tokens to AST (spec Appendix A)
Documentation
---
source: crates/crisp-parser/tests/parse_server.rs
expression: file
---
SourceFile {
    items: [
        Use(
            UseDecl {
                is_pub: false,
                path: [
                    Ident {
                        name: "config",
                        span: Span {
                            start: 46,
                            end: 52,
                        },
                    },
                ],
                imports: Some(
                    [
                        UseImport {
                            name: Ident {
                                name: "Config",
                                span: Span {
                                    start: 55,
                                    end: 61,
                                },
                            },
                            alias: None,
                            span: Span {
                                start: 55,
                                end: 61,
                            },
                        },
                    ],
                ),
                span: Span {
                    start: 42,
                    end: 63,
                },
            },
        ),
        Use(
            UseDecl {
                is_pub: false,
                path: [
                    Ident {
                        name: "greet",
                        span: Span {
                            start: 68,
                            end: 73,
                        },
                    },
                ],
                imports: Some(
                    [
                        UseImport {
                            name: Ident {
                                name: "greet",
                                span: Span {
                                    start: 76,
                                    end: 81,
                                },
                            },
                            alias: None,
                            span: Span {
                                start: 76,
                                end: 81,
                            },
                        },
                    ],
                ),
                span: Span {
                    start: 64,
                    end: 83,
                },
            },
        ),
        Function(
            FunctionDef {
                is_pub: true,
                name: Ident {
                    name: "main",
                    span: Span {
                        start: 89,
                        end: 93,
                    },
                },
                generics: [],
                params: [],
                ret_type: None,
                error_type: None,
                body: Expr {
                    kind: Block(
                        Block {
                            stmts: [
                                Bind {
                                    pat: Pat {
                                        kind: Ident(
                                            Ident {
                                                name: "cfg",
                                                span: Span {
                                                    start: 104,
                                                    end: 107,
                                                },
                                            },
                                        ),
                                        span: Span {
                                            start: 104,
                                            end: 107,
                                        },
                                    },
                                    mutable: false,
                                    value: Expr {
                                        kind: StructLit {
                                            name: Ident {
                                                name: "Config",
                                                span: Span {
                                                    start: 111,
                                                    end: 117,
                                                },
                                            },
                                            fields: [
                                                FieldInit {
                                                    name: Ident {
                                                        name: "port",
                                                        span: Span {
                                                            start: 120,
                                                            end: 124,
                                                        },
                                                    },
                                                    value: Expr {
                                                        kind: Int(
                                                            3000,
                                                        ),
                                                        span: Span {
                                                            start: 126,
                                                            end: 130,
                                                        },
                                                    },
                                                    span: Span {
                                                        start: 120,
                                                        end: 130,
                                                    },
                                                },
                                            ],
                                        },
                                        span: Span {
                                            start: 111,
                                            end: 132,
                                        },
                                    },
                                },
                                Expr(
                                    Expr {
                                        kind: Call {
                                            func: Expr {
                                                kind: Ident(
                                                    Ident {
                                                        name: "log",
                                                        span: Span {
                                                            start: 137,
                                                            end: 140,
                                                        },
                                                    },
                                                ),
                                                span: Span {
                                                    start: 137,
                                                    end: 140,
                                                },
                                            },
                                            args: [
                                                Expr {
                                                    kind: Str(
                                                        StringParts(
                                                            [
                                                                Lit(
                                                                    "listening on ",
                                                                ),
                                                                Expr(
                                                                    Expr {
                                                                        kind: Field {
                                                                            base: Expr {
                                                                                kind: Ident(
                                                                                    Ident {
                                                                                        name: "cfg",
                                                                                        span: Span {
                                                                                            start: 156,
                                                                                            end: 159,
                                                                                        },
                                                                                    },
                                                                                ),
                                                                                span: Span {
                                                                                    start: 156,
                                                                                    end: 159,
                                                                                },
                                                                            },
                                                                            field: Ident {
                                                                                name: "host",
                                                                                span: Span {
                                                                                    start: 160,
                                                                                    end: 164,
                                                                                },
                                                                            },
                                                                        },
                                                                        span: Span {
                                                                            start: 156,
                                                                            end: 164,
                                                                        },
                                                                    },
                                                                ),
                                                                Lit(
                                                                    ":",
                                                                ),
                                                                Expr(
                                                                    Expr {
                                                                        kind: Field {
                                                                            base: Expr {
                                                                                kind: Ident(
                                                                                    Ident {
                                                                                        name: "cfg",
                                                                                        span: Span {
                                                                                            start: 167,
                                                                                            end: 170,
                                                                                        },
                                                                                    },
                                                                                ),
                                                                                span: Span {
                                                                                    start: 167,
                                                                                    end: 170,
                                                                                },
                                                                            },
                                                                            field: Ident {
                                                                                name: "port",
                                                                                span: Span {
                                                                                    start: 171,
                                                                                    end: 175,
                                                                                },
                                                                            },
                                                                        },
                                                                        span: Span {
                                                                            start: 167,
                                                                            end: 175,
                                                                        },
                                                                    },
                                                                ),
                                                            ],
                                                        ),
                                                    ),
                                                    span: Span {
                                                        start: 141,
                                                        end: 177,
                                                    },
                                                },
                                            ],
                                        },
                                        span: Span {
                                            start: 137,
                                            end: 178,
                                        },
                                    },
                                ),
                            ],
                            tail: Some(
                                Expr {
                                    kind: Call {
                                        func: Expr {
                                            kind: Ident(
                                                Ident {
                                                    name: "log",
                                                    span: Span {
                                                        start: 183,
                                                        end: 186,
                                                    },
                                                },
                                            ),
                                            span: Span {
                                                start: 183,
                                                end: 186,
                                            },
                                        },
                                        args: [
                                            Expr {
                                                kind: Call {
                                                    func: Expr {
                                                        kind: Ident(
                                                            Ident {
                                                                name: "greet",
                                                                span: Span {
                                                                    start: 187,
                                                                    end: 192,
                                                                },
                                                            },
                                                        ),
                                                        span: Span {
                                                            start: 187,
                                                            end: 192,
                                                        },
                                                    },
                                                    args: [],
                                                },
                                                span: Span {
                                                    start: 187,
                                                    end: 194,
                                                },
                                            },
                                        ],
                                    },
                                    span: Span {
                                        start: 183,
                                        end: 195,
                                    },
                                },
                            ),
                            span: Span {
                                start: 98,
                                end: 197,
                            },
                        },
                    ),
                    span: Span {
                        start: 98,
                        end: 197,
                    },
                },
                span: Span {
                    start: 89,
                    end: 197,
                },
            },
        ),
    ],
    span: Span {
        start: 42,
        end: 197,
    },
}