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.

Reply via email to