I'm not sure this approach is going to work for Racket. Being able to run `read` when the input is malformed is going to only get you so far, as the macro expansion seems unlikely to work and this is a point of extension for programers using Racket.
Maybe a better approach would be to help DrRacket be better at keeping information from the last time the expansion was successful and apply that information to a program that has been edited since then? Robby On Wed, Dec 2, 2020 at 8:53 AM nicobao <[email protected]> wrote: > Hi! > > The Racket Reader and the Racket Expander always return "Error : blabla" > when you send it a bad Racket source code. > As a consequence, when there is a source code error, DrRacket and the > Racket LSP cannot provide IDE functionalities like "find references", "info > on hover", "find definition"...etc. > This is an issue, because 99% of the time one write code, the code is > incorrect. Other languages (Rust, Typescript/JS, Java, OCaml...etc) rely on > an incremental parser than can provide a tree even if the source code is > wrong. Basically it adds an "ERROR" node in the tree, and go on instead of > stopping everything and returning at the first error. > Currently this compiler issue is blocking the Racket IDE to provide better > user experience. > For my practical use case of Racket, it is important. > > I would like to help working towards that direction. > I see two possible solutions to that: > 1) improve the recursive descent parser of the Reader, as well as the > Expander to make them incremental and fault-tolerant > 2) re-writing the parser in something like tree-sitter or Menhir, at the > cost of having to re-write the Reader/Expander logic (!!!) > > Both solutions are daunting tasks. > > For solution 1), could you point me to the Racket's recursive descent > parser source code? What about the Expander ? > > For solution 2), I was thinking of writing a tree-sitter grammar for > racket. However, I can't find a formal description of the grammar, like > Scheme did here: > https://www.scheme.com/tspl4/grammar.html#APPENDIXFORMALSYNTAX > Of course, the Racket documentation is still quite comprehensive, but it > would be nice if anyone could tell me if there is such formal document > somewhere? > Besides, I wonder whether Racket/Scheme could even be described using a > LR(1) or a GLR grammar? > > Finally, is any work have been started towards this direction? > > Totally off-topic, but has anyone ever thought of compiling Racket down to > OCaml, in order to reuse js_of_ocaml and produce optimized JS code from > Racket? > I was wondering whether it would be feasible. > > Final note: I know all of that is _very_ ambitious! > > Kind regards, > Nicolas > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/racket-users/d77440e3-1876-44e5-b52b-323d5715df66n%40googlegroups.com > <https://groups.google.com/d/msgid/racket-users/d77440e3-1876-44e5-b52b-323d5715df66n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAL3TdOOB-8qUncNcRz_NFqvQVEK5rT5jeRY8jfq1W6mN2h40eg%40mail.gmail.com.

