From ab063326fefd0cce4e003ec3dea63cbb8e4300d9 Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Thu, 25 Feb 2016 10:35:47 -0600 Subject: [PATCH] change indentation strategy for sequences whose head is a keyword assume that these are part of some internal structure of something that, in general looks like (#:x 1 #:y 2 #:z 3) and so prefer to indent like this: (#:x 1 #:y 2 #:z 3) instead of like this: (#:x 1 #:y 2 #:z 3) --- gui-lib/framework/private/racket.rkt | 9 +++++++++ gui-test/framework/tests/racket.rkt | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/gui-lib/framework/private/racket.rkt b/gui-lib/framework/private/racket.rkt index 8872c12f..df67828e 100644 --- a/gui-lib/framework/private/racket.rkt +++ b/gui-lib/framework/private/racket.rkt @@ -702,6 +702,8 @@ (- id-end contains) 0)) (cond + [(first-sexp-is-keyword? contains) + (visual-offset contains)] [(second-sexp-is-ellipsis? contains) (visual-offset contains)] [(not (find-up-sexp pos)) @@ -738,6 +740,13 @@ (and (or (not thrd-start) (not (= (position-paragraph thrd-start) (position-paragraph snd-start))))))))))))) + + (define/private (first-sexp-is-keyword? contains) + (let ([fst-end (get-forward-sexp contains)]) + (and fst-end + (let ([fst-start (get-backward-sexp fst-end)]) + (and fst-start + (equal? (classify-position fst-start) 'hash-colon-keyword)))))) (define/public (tabify-selection [start-pos (get-start-position)] [end-pos (get-end-position)]) diff --git a/gui-test/framework/tests/racket.rkt b/gui-test/framework/tests/racket.rkt index a88ea3c6..87c93365 100644 --- a/gui-test/framework/tests/racket.rkt +++ b/gui-test/framework/tests/racket.rkt @@ -171,6 +171,10 @@ "(r a\n b\n c\n d\n e\n f\n g") (test-indentation "(r a b\nc d\ne f\ng h" "(r a b\n c d\n e f\n g h") +(test-indentation "(#:x\n1)" + "(#:x\n 1)") +(test-indentation "(#:x 0\n1)" + "(#:x 0\n 1)") (define (test-magic-square-bracket which before after)