added an optional argument to compute-racket-amount-to-indent

This commit is contained in:
Robby Findler 2016-06-05 08:41:10 -05:00
parent 48d2de53d5
commit 7c857706d7
2 changed files with 23 additions and 10 deletions

View File

@ -84,12 +84,22 @@
}
@defmethod[#:mode public-final
(compute-racket-amount-to-indent [pos exact-nonnegative-integer?])
(compute-racket-amount-to-indent
[pos exact-nonnegative-integer?]
[get-keyword-type
(-> string? (or/c #f 'lambda 'define 'begin 'for/fold 'other))
(λ (x) #f)])
exact-nonnegative-integer?]{
Computes the amount of space to indent the line containing @racket[pos],
using the default s-expression indentation strategy.
@history[#:added "1.9"]
The function @racket[get-keyword-type] is consulted for each symbol/keyword
that follows an open parenthesis. If it returns @racket[#f], then the
user's preferences (from the @onscreen{Indenting} panel of the @onscreen{Editing}
panel in the preferences dialog) are used.
@history[#:added "1.9"
#:changed "1.26" @list{Added the @racket[get-keyword-type] argument.}]
}
@defmethod[#:mode augment

View File

@ -564,11 +564,15 @@
tab-char?))
(define/pubment (compute-amount-to-indent pos)
(inner (compute-racket-amount-to-indent pos) compute-amount-to-indent pos))
(define/public-final (compute-racket-amount-to-indent pos)
(define/public-final (compute-racket-amount-to-indent pos [_get-keyword-type (λ (x) #f)])
(cond
[(is-stopped?) #f]
[else
(define tabify-prefs (preferences:get 'framework:tabify))
(define get-keyword-type
(let ([tabify-prefs (preferences:get 'framework:tabify)])
(λ (text)
(or (_get-keyword-type text)
(get-keyword-type-from-prefs text tabify-prefs)))))
(define last-pos (last-position))
(define para (position-paragraph pos))
(define is-tabbable?
@ -627,8 +631,7 @@
(let ([text (get-text contains id-end)])
(cond
[(member (classify-position contains) '(keyword symbol))
(or (get-keyword-type text tabify-prefs)
'other)]
(get-keyword-type text)]
[else
'other]))))
(define (procedure-indent)
@ -1345,7 +1348,7 @@
(cond
[(and (eq? type 'symbol)
(string? lexeme)
(get-keyword-type lexeme tabify-pref))
(get-keyword-type-from-prefs lexeme tabify-pref))
(values lexeme 'keyword paren start end backup-delta new-mode)]
[else
(values lexeme type paren start end backup-delta new-mode)]))
@ -1364,9 +1367,9 @@
(|[| |]|)
(|{| |}|))))))
;; get-keyword-type : string (list ht regexp regexp regexp)
;; -> (or/c #f 'lambda 'define 'begin 'for/fold)
(define (get-keyword-type text pref)
;; get-keyword-type-from-prefs : string (list ht regexp regexp regexp)
;; -> (or/c #f 'lambda 'define 'begin 'for/fold)
(define (get-keyword-type-from-prefs text pref)
(define ht (car pref))
(define beg-reg (list-ref pref 1))
(define def-reg (list-ref pref 2))