jgm / djot

A light markup language
https://djot.net
MIT License
1.74k stars 45 forks source link

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

Open bdarcus opened 1 year ago

bdarcus commented 1 year ago

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.

https://github.com/hellux/jotdown/issues/17#issuecomment-1523620546

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?

clbarnes commented 1 year ago

The result of my effort with typify: https://github.com/oxidecomputer/typify/issues/269

jgm commented 1 year ago

No idea. @matklad may have more insight.

bdarcus commented 1 year ago

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.