diff --git a/racket-indent.el b/racket-indent.el index 131ce231..ea56f42c 100644 --- a/racket-indent.el +++ b/racket-indent.el @@ -187,7 +187,8 @@ the `racket-indent-function` property." (let ((body-indent (+ (current-column) lisp-body-indent))) (forward-char 1) (if (or (racket--hash-literal-or-keyword-p) - (racket--data-sequence-p)) + (racket--data-sequence-p) + (racket--all-hyphens-p)) (progn (backward-prefix-chars) (current-column)) (let* ((head (buffer-substring (point) (progn (forward-sexp 1) (point)))) (method (racket--get-indent-function-method head))) @@ -228,6 +229,10 @@ Returns nil for #% identifiers like #%app." (looking-at (rx ?\# (or ?\: (not (any ?\%)))))) +(defun racket--all-hyphens-p () + "Magic for redex like what DrRacket does." + (looking-at (rx (>= 3 ?-) (and (not (syntax word)) (not (syntax symbol)))))) + (defun racket--data-sequence-p () "Looking at \"data\" sequences where we align under head item? diff --git a/racket/example/indent.rkt b/racket/example/indent.rkt index f541a75a..401ab10e 100644 --- a/racket/example/indent.rkt +++ b/racket/example/indent.rkt @@ -333,3 +333,18 @@ [b : Number]) : Number 10) + +;; Issue #521 +(define-judgment-form L + #:mode (⇓ I I O O) + #:contract (⇓ Γ e Δ v) + + [----------- Value + (⇓ Γ v Γ v)] + + + [(⇓ Γ e Δ (λ (y) e_*)) + (⇓ Δ (subst e_* y x) Θ v) + ------------------------- Application + (⇓ Γ (e x) Θ v)]) + diff --git a/racket/example/indent.rkt.faceup b/racket/example/indent.rkt.faceup index ff82d3e9..f27a8d15 100644 --- a/racket/example/indent.rkt.faceup +++ b/racket/example/indent.rkt.faceup @@ -333,3 +333,18 @@ [b «b::» «t:Number»]) «b::» «t:Number» «:racket-selfeval-face:10») + +«m:;; »«x:Issue #521 +»(define-judgment-form «v:L» + «:racket-keyword-argument-face:#:mode» (⇓ I I O O) + «:racket-keyword-argument-face:#:contract» (⇓ Γ e Δ v) + + [----------- Value + (⇓ Γ v Γ v)] + + + [(⇓ Γ e Δ («k:λ» (y) e_*)) + (⇓ Δ (subst e_* y x) Θ v) + ------------------------- Application + (⇓ Γ (e x) Θ v)]) +