h1alexbel / fsl

FakeHub State Language. DSL for managing state in fakehub
MIT License
4 stars 0 forks source link

transpile AST #15

Open h1alexbel opened 6 days ago

h1alexbel commented 6 days ago

The following AST should be transpiled to fakehub-types, Rust structs.

[
    Pair {
        rule: program,
        span: Span {
            str: "me: @jeff\n+repo me/foo > x\n+repo me/bar > y\n",
            start: 0,
            end: 44,
        },
        inner: [
            Pair {
                rule: me,
                span: Span {
                    str: "me: @jeff",
                    start: 0,
                    end: 9,
                },
                inner: [
                    Pair {
                        rule: ME,
                        span: Span {
                            str: "me",
                            start: 0,
                            end: 2,
                        },
                        inner: [],
                    },
                    Pair {
                        rule: SEMICOLON,
                        span: Span {
                            str: ":",
                            start: 2,
                            end: 3,
                        },
                        inner: [],
                    },
                    Pair {
                        rule: login,
                        span: Span {
                            str: "@jeff",
                            start: 4,
                            end: 9,
                        },
                        inner: [
                            Pair {
                                rule: char,
                                span: Span {
                                    str: "j",
                                    start: 5,
                                    end: 6,
                                },
                                inner: [],
                            },
                            Pair {
                                rule: char,
                                span: Span {
                                    str: "e",
                                    start: 6,
                                    end: 7,
                                },
                                inner: [],
                            },
                            Pair {
                                rule: char,
                                span: Span {
                                    str: "f",
                                    start: 7,
                                    end: 8,
                                },
                                inner: [],
                            },
                            Pair {
                                rule: char,
                                span: Span {
                                    str: "f",
                                    start: 8,
                                    end: 9,
                                },
                                inner: [],
                            },
                        ],
                    },
                ],
            },
            Pair {
                rule: command,
                span: Span {
                    str: "+repo me/foo > x",
                    start: 10,
                    end: 26,
                },
                inner: [
                    Pair {
                        rule: CREATION,
                        span: Span {
                            str: "+",
                            start: 10,
                            end: 11,
                        },
                        inner: [],
                    },
                    Pair {
                        rule: object,
                        span: Span {
                            str: "repo me/foo > x",
                            start: 11,
                            end: 26,
                        },
                        inner: [
                            Pair {
                                rule: oid,
                                span: Span {
                                    str: "repo",
                                    start: 11,
                                    end: 15,
                                },
                                inner: [
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "r",
                                            start: 11,
                                            end: 12,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "e",
                                            start: 12,
                                            end: 13,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "p",
                                            start: 13,
                                            end: 14,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "o",
                                            start: 14,
                                            end: 15,
                                        },
                                        inner: [],
                                    },
                                ],
                            },
                            Pair {
                                rule: attributes,
                                span: Span {
                                    str: "me/foo",
                                    start: 16,
                                    end: 22,
                                },
                                inner: [
                                    Pair {
                                        rule: ME,
                                        span: Span {
                                            str: "me",
                                            start: 16,
                                            end: 18,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: AT,
                                        span: Span {
                                            str: "/",
                                            start: 18,
                                            end: 19,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "f",
                                            start: 19,
                                            end: 20,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "o",
                                            start: 20,
                                            end: 21,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "o",
                                            start: 21,
                                            end: 22,
                                        },
                                        inner: [],
                                    },
                                ],
                            },
                            Pair {
                                rule: new,
                                span: Span {
                                    str: "> x",
                                    start: 23,
                                    end: 26,
                                },
                                inner: [
                                    Pair {
                                        rule: ASSIGNMENT,
                                        span: Span {
                                            str: ">",
                                            start: 23,
                                            end: 24,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: reference,
                                        span: Span {
                                            str: "x",
                                            start: 25,
                                            end: 26,
                                        },
                                        inner: [
                                            Pair {
                                                rule: char,
                                                span: Span {
                                                    str: "x",
                                                    start: 25,
                                                    end: 26,
                                                },
                                                inner: [],
                                            },
                                        ],
                                    },
                                ],
                            },
                        ],
                    },
                ],
            },
            Pair {
                rule: command,
                span: Span {
                    str: "+repo me/bar > y",
                    start: 27,
                    end: 43,
                },
                inner: [
                    Pair {
                        rule: CREATION,
                        span: Span {
                            str: "+",
                            start: 27,
                            end: 28,
                        },
                        inner: [],
                    },
                    Pair {
                        rule: object,
                        span: Span {
                            str: "repo me/bar > y",
                            start: 28,
                            end: 43,
                        },
                        inner: [
                            Pair {
                                rule: oid,
                                span: Span {
                                    str: "repo",
                                    start: 28,
                                    end: 32,
                                },
                                inner: [
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "r",
                                            start: 28,
                                            end: 29,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "e",
                                            start: 29,
                                            end: 30,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "p",
                                            start: 30,
                                            end: 31,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "o",
                                            start: 31,
                                            end: 32,
                                        },
                                        inner: [],
                                    },
                                ],
                            },
                            Pair {
                                rule: attributes,
                                span: Span {
                                    str: "me/bar",
                                    start: 33,
                                    end: 39,
                                },
                                inner: [
                                    Pair {
                                        rule: ME,
                                        span: Span {
                                            str: "me",
                                            start: 33,
                                            end: 35,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: AT,
                                        span: Span {
                                            str: "/",
                                            start: 35,
                                            end: 36,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "b",
                                            start: 36,
                                            end: 37,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "a",
                                            start: 37,
                                            end: 38,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: char,
                                        span: Span {
                                            str: "r",
                                            start: 38,
                                            end: 39,
                                        },
                                        inner: [],
                                    },
                                ],
                            },
                            Pair {
                                rule: new,
                                span: Span {
                                    str: "> y",
                                    start: 40,
                                    end: 43,
                                },
                                inner: [
                                    Pair {
                                        rule: ASSIGNMENT,
                                        span: Span {
                                            str: ">",
                                            start: 40,
                                            end: 41,
                                        },
                                        inner: [],
                                    },
                                    Pair {
                                        rule: reference,
                                        span: Span {
                                            str: "y",
                                            start: 42,
                                            end: 43,
                                        },
                                        inner: [
                                            Pair {
                                                rule: char,
                                                span: Span {
                                                    str: "y",
                                                    start: 42,
                                                    end: 43,
                                                },
                                                inner: [],
                                            },
                                        ],
                                    },
                                ],
                            },
                        ],
                    },
                ],
            },
        ],
    },
]
github-actions[bot] commented 6 days ago

@h1alexbel Here is a summary of the bug report:

Quality problem: The bug report is overly verbose and contains excessive technical details, making it difficult to understand the core issue.

Suggestion: Provide a clear and concise description of the issue, including the expected and actual behavior, and only include relevant technical details.