Open leafac opened 8 years ago
I think it makes sense to make this change. The code, perhaps confusingly, is in the https://github.com/racket/gui/ repo, tho. This is the code:
https://github.com/racket/gui/blob/master/gui-lib/scribble/private/indentation.rkt
@rfindler: Thank you for the reply. I'll look at the code and try to figure it out.
I narrowed down the problem to the determine-spaces function, and I think it is needed to add a case for #\{
like for #\(
, but only when the {
is not preceeded by an @at-exp{
.
I'm having trouble however writing this check, e.g. when I perform (send txt get-backward-sexp prev-posi)
on a test which starts with #lang scribble/base
it jumps to the a
on @at-exp{
, but performing get-backward-sexp
on a test which deos not start with #lang scribble/base
jumps all the way to the @
sign.
So far I got this:
…
[(equal? #\( (send txt get-character prev-posi)) #f]
[(and (equal? #\{ (send txt get-character prev-posi))
(not (equal? 'text char-classify))
(not (equal? 'text (send txt classify-position posi)))
(let* ([prev-maybe-at-sexp
(send txt get-backward-sexp prev-posi)]
[preceeded-by-at-sexp
(or (and prev-maybe-at-sexp
(> prev-maybe-at-sexp 0)
(is-at-sign? txt (sub1 prev-maybe-at-sexp)))
(and prev-maybe-at-sexp
(is-at-sign? txt prev-maybe-at-sexp)))])
(not preceeded-by-at-sexp)))
#f]
…
But it fails on a few tests (3) because my check "is this s-expression is preceeded by an @symbol" is unreliable, and I didn't manage to find a way to fix it.
@jsmaniac: Thank you for your progress. I get the general idea, but most of the implementation details are going over my head, for now. I'm going to further study and try to get the hang of things.
CURRENT BEHAVIOR
In
#lang racket
,{braces}
work the same as(parentheses)
and expressions using either are indented the same:In
#lang at-exp
, the@
-expressions with{braces}
are indented differently:And that difference applies even to non-
@
-expressions with{braces}
:EXPECTED BEHAVIOR
Using
#lang at-exp
does not affect the indentation of non-@
-expressions:RELATED DISCUSSION
https://github.com/mbutterick/pollen/issues/124
Do you think this makes sense? If so, how can I help turning this idea into code?