jgm/djot

Code generation from ast.ts/djot-schema.json

bdarcus opened this issue · 3 comments

A couple of us have been looking into automatically-generating Rust AST code from the definitions here. We tried three different converters, but none of them provides any results.

hellux/jotdown#17 (comment)

Here's what I get with quicktype from the json schema, but the same error with the typescript:

quicktype -s schema  -l rs -t Doc djot-schema.json
Error: Maximum call stack size exceeded.quicktype -s ts  -l rs -t Doc src/ast.ts
Error: Maximum call stack size exceeded.

Which makes me wonder if there's something about the typescript definition, and/or the json schema conversion, that is causing these problems?

The result of my effort with typify: oxidecomputer/typify#269

jgm commented

No idea. @matklad may have more insight.

Preface: maybe I should have added this to the js repo instead? Feel free to move it of course.

In looking at the generated schema, I'm not sure all of it matches the source.

For example, here's a schema definition:

        "Record<string,Footnote>": {
            "additionalProperties": false,
            "type": "object"
        },

And here's the source (I think):

  footnotes: Record<string, Footnote>;

It looks to me like the TS is tighter than the schema.

I ran into these sorts of issues when testing these tools; one of the reasons I switched to Rust (I'm using schemars to generate the schemas; that works very well).

EDIT: basically, I don't think you can rely on automatic schema generation in JS/Typescript; the schema will not match the code precisely.