Except for the fact that the definitions-text-surrogate was kind of dubious to begin with, this sounds like a good idea to me!
Robby On Sat, Dec 1, 2018 at 10:50 PM Leif Andersen <[email protected]> wrote: > BACKGROUND: > > DrRacket uses a language's get-info function to set parameters such as > syntax coloring, indentation, and toolbar buttons. One parameter is > `definitions-text-surrogate`[1], which lets `#lang`s set a surrogate > for DrRacket. The docs mention that this is a powerful, yet easy to do > wrong, IDE extension mechanism. > > Unfortunately, as is, the `definitions-text-surrogate` form does not > mix well with meta-languages e.g. s-exp, reader, at-exp. When given > the `definitions-text-surrogate` key, get-info returns a single module > path for DrRacket to `dynamic-require`. There is no way for a > meta-language to mix in its surrogate with the surrogate of the > language its extending. (At least not without either creating a > temporary file on the fly, or trying to scrape the current state of > DrRacket. Both of which are terrible ideas.) > > > > > PROPOSAL: > > We extend the valid values for the `definitions-text-surrogate` key to > be a list of symbols as well as a single symbol. In the case of a > single symbol, nothing changes. > > In the case of a list, each element must also be a module path. The > last element must refer to a module that provides a `surrogate%` class > as before. Every other element, however, refers to a module that > provides a `surrogate%` _mixin_. The IDE constructs the expected > surrogate by traversing the list, each time `dynamic-require`ing the > module, and mixing in the result. Meta-languages can augment existing > surrogates, rather than having to throw them away entirely. The > `get-info` code for a meta-language might look something like this: > > ``` > (make-meta-reader > ... > (lambda (base-get-info) > (lambda (key default) > (case key > [(definitions-text-surrogate) (flatten (list > "meta-surrogate.rkt" (base-get-info key default)))]))) > ``` > > > > ENGINEERING EFFORT: > It looks like all of the changes would be confined to the following files: > drracket/drracket/drracket/private/in-irl-namespace.rkt > drracket/drracket/drracket/private/insulated-read-language.rkt > drracket/drracket/drracket/private/module-language-tools.rkt > > (Obviously also documentation+tests) > > [1]: > http://docs.racket-lang.org/tools/lang-languages-customization.html?q=Definitions%20Text%20Surrogate#%28part._sec~3adefinitions-text-surrogate%29 > > -- > ~Leif Andersen > > -- > You received this message because you are subscribed to the Google Groups > "Racket Developers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/racket-dev/CAAVaeECiQhKiziKVp6wOOWm6vQM1GPr90yPAOHoyOHDBJ3c62g%40mail.gmail.com > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Racket Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-dev/CAL3TdONdjkzEMwywVmtqF_k%3Dewza0e9puBRy9pdhN_4XuTbDpw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
