[racket-dev] A few suggestions on indentation and DrRacket graphical syntax

From: Laurent (laurent.orseau at gmail.com)
Date: Sat May 12 03:34:38 EDT 2012

On Sat, May 12, 2012 at 12:49 AM, Eli Barzilay <eli at barzilay.org> wrote:

> 5 hours ago, Neil Toronto wrote:
> > On 05/09/2012 02:18 AM, Laurent wrote:
> > > From the guide: "Caveat 1: Until language specifications come with
> > > fixed indentation rules, we need to use the default settings of
> > > DrRacket’s indentation for this rule to make sense."
> > >
> > > Maybe a special submodule like drracket-indentation with
> > > declarations like:
> > > (module+ drracket-indentation
> > >    (like-lambda my-lambda my-function ....)
> > >    (like-begin my-begin ....)
> > >    )
> > > could be useful for user-specific indentation.
> > >
> > > As a submodule, Racket can read&load it only at appropriate
> > > moments.  When indenting the file, DrRacket could first load the
> > > drracket-indentation module of the file to know how to indent it.
> > >
> > > One could then create a whole language with its own indentation
> > > rules.  It would also be easier to add good indentations for
> > > for/fold and others.
> >
> > That would be awesome for Typed Racket macros in particular. Its
> > `for' macros are great examples of forms that should have fairly
> > complex indentation rules. Optional type declarations make it
> > difficult to classify them as "begin-like", "define-like" or
> > "lambda-like".
> That kind of indentation specification is more fitting in the language
> info, together with coloring etc.

Probably. But how can the user specify its own rules then?
(genuine question, I don't know where the language info lies, and how it
can be extended)

> For specific macros in some random file something that I suggested in
> the past could work better: have an ability to use "sub-namespaces"
> where an identifier can have a number of related bindings -- so you
> could define `foo' and some `foo at indent' (or whatever) which specifies
> indentation.  The reason that this would work better is that any
> context that receives the `foo' binding would also get its
> indentation.

Interesting idea.
Could sub-namespaces be loaded independently from the main identifier, in
case you don't need it?
Anyway, submodules already exists, hence my suggestion.

 Eg, think about providing it as `bar' -- if the rules
> are in a sub-module, then it won't work unless you construct your own
> sub-module.

Unless `bar' knows its real name is `foo'? (which it does, maybe?)
Currently, DrRacket does not seem to be able to do this anyway
(which may be why you proposed sub-namespaces?):

#lang racket
(require (rename-in racket [define gabuzomeu]))

(gabuzomeu (foo bar)
           (list bar))

So probably sub-moduled indentation rules would be a less important change
than adding sub-namespaces,
and thus requires less work which makes it more probable to appear in a
near future?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/dev/archive/attachments/20120512/cd452f2e/attachment.html>

Posted on the dev mailing list.