adjust indentation so that a sequence of hyphens always moves to the start of the sexp
This commit is contained in:
parent
d9dbfb01fd
commit
9f3635f399
|
@ -697,8 +697,11 @@
|
||||||
;; So far, the S-exp containing "pos" was all on
|
;; So far, the S-exp containing "pos" was all on
|
||||||
;; one line (possibly not counting the opening paren),
|
;; one line (possibly not counting the opening paren),
|
||||||
;; so indent to follow the first S-exp's end
|
;; so indent to follow the first S-exp's end
|
||||||
;; unless there are just two sexps and the second is an ellipsis.
|
;; unless
|
||||||
;; in that case, we just ignore the ellipsis
|
;; - there are just two sexps earlier and the second is an ellipsis.
|
||||||
|
;; in that case, we just ignore the ellipsis or
|
||||||
|
;; - the sexp we are indenting is a bunch of hypens;
|
||||||
|
;; in that case, we match the opening paren
|
||||||
(define id-end (get-forward-sexp contains))
|
(define id-end (get-forward-sexp contains))
|
||||||
(define name-length
|
(define name-length
|
||||||
(if id-end
|
(if id-end
|
||||||
|
@ -709,6 +712,8 @@
|
||||||
(visual-offset contains)]
|
(visual-offset contains)]
|
||||||
[(second-sexp-is-ellipsis? contains)
|
[(second-sexp-is-ellipsis? contains)
|
||||||
(visual-offset contains)]
|
(visual-offset contains)]
|
||||||
|
[(sexp-is-all-hyphens? pos)
|
||||||
|
(visual-offset contains)]
|
||||||
[(not (find-up-sexp pos))
|
[(not (find-up-sexp pos))
|
||||||
(visual-offset contains)]
|
(visual-offset contains)]
|
||||||
[else
|
[else
|
||||||
|
@ -728,6 +733,21 @@
|
||||||
(visual-offset last))))]))
|
(visual-offset last))))]))
|
||||||
amt-to-indent]))
|
amt-to-indent]))
|
||||||
|
|
||||||
|
;; returns #t if `pos` is in a symbol (or keyword) that consists entirely
|
||||||
|
;; of hyphens and has at least three hyphens; returns #f otherwise
|
||||||
|
(define/private (sexp-is-all-hyphens? pos)
|
||||||
|
(define fst-end (get-forward-sexp pos))
|
||||||
|
(and fst-end
|
||||||
|
(let ([fst-start (get-backward-sexp fst-end)])
|
||||||
|
(and fst-start
|
||||||
|
(memq (classify-position fst-start) '(symbol keyword))
|
||||||
|
(>= (- fst-end fst-start) 3)
|
||||||
|
(let loop ([i fst-start])
|
||||||
|
(cond
|
||||||
|
[(< i fst-end)
|
||||||
|
(and (equal? #\- (get-character i)) (loop (+ i 1)))]
|
||||||
|
[else #t]))))))
|
||||||
|
|
||||||
;; returns #t if `contains' is at a position on a line with an sexp, an ellipsis and nothing else.
|
;; returns #t if `contains' is at a position on a line with an sexp, an ellipsis and nothing else.
|
||||||
;; otherwise, returns #f
|
;; otherwise, returns #f
|
||||||
(define/private (second-sexp-is-ellipsis? contains)
|
(define/private (second-sexp-is-ellipsis? contains)
|
||||||
|
|
|
@ -175,6 +175,8 @@
|
||||||
"(#:x\n 1)")
|
"(#:x\n 1)")
|
||||||
(test-indentation "(#:x 0\n1)"
|
(test-indentation "(#:x 0\n1)"
|
||||||
"(#:x 0\n 1)")
|
"(#:x 0\n 1)")
|
||||||
|
(test-indentation "(a b c d\n---)"
|
||||||
|
"(a b c d\n ---)")
|
||||||
|
|
||||||
|
|
||||||
(define (test-magic-square-bracket which before after)
|
(define (test-magic-square-bracket which before after)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user