IIUC, many tools (Racket Mode <https://www.racket-mode.com/>, drcomplete <https://github.com/yjqww6/drcomplete>) do exactly what Robby said: cache the most recent successfully expanded code.
On Wed, Dec 2, 2020 at 7:08 AM Robby Findler <[email protected]> wrote: > 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 > <https://groups.google.com/d/msgid/racket-users/CAL3TdOOB-8qUncNcRz_NFqvQVEK5rT5jeRY8jfq1W6mN2h40eg%40mail.gmail.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/CADcueguEB9nkXoVrZ%3D-DyqqPnKLQmbwqudHY5OfOS0P8v53Kkw%40mail.gmail.com.

