[racket-dev] A few suggestions on indentation and DrRacket graphical syntax
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.
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. 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.
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!