326 lines
5.2 KiB
Racket
326 lines
5.2 KiB
Racket
![]() |
;; -*- racket-indent-sequence-depth: 100; racket-indent-curly-as-sequence: t; -*-
|
|||
|
|
|||
|
;;; NOTE: After changing this file you will need to M-x faceup-write-file
|
|||
|
;;; to regenerate the .faceup test comparison file.
|
|||
|
;;;
|
|||
|
;;; NOTE: You may need to disable certain features -- for example
|
|||
|
;;; global-paren-face-mode -- during the M-x faceup-write-file.
|
|||
|
|
|||
|
;;; Quoted list
|
|||
|
|
|||
|
'(a b
|
|||
|
(a b
|
|||
|
c))
|
|||
|
|
|||
|
'((1) 2 3
|
|||
|
(3)
|
|||
|
4 5)
|
|||
|
|
|||
|
;;; Quasiquoted list (align with head) and unquote or unquote-splicing
|
|||
|
;;; (use normal indent rules for the form).
|
|||
|
|
|||
|
`(Part ()
|
|||
|
(PartNumber ()
|
|||
|
,part)
|
|||
|
(ETag ()
|
|||
|
,etag))
|
|||
|
|
|||
|
`((,(x)
|
|||
|
,y))
|
|||
|
|
|||
|
`(Delete
|
|||
|
,@(for/list ([p (in-list paths)])
|
|||
|
`(Object ()
|
|||
|
(Key () ,p))))
|
|||
|
|
|||
|
;;; Syntax
|
|||
|
|
|||
|
#'(for/list ([x xs])
|
|||
|
x)
|
|||
|
|
|||
|
#`(for/list ([x xs])
|
|||
|
x)
|
|||
|
|
|||
|
#'(#%app (#%app hasheq (quote a) (quote 42))
|
|||
|
(quote a))
|
|||
|
|
|||
|
(#%app (#%app hasheq (quote a) (quote 42))
|
|||
|
(quote a))
|
|||
|
|
|||
|
#'(foo (#%app hasheq (quote a) (quote 42))
|
|||
|
(quote a))
|
|||
|
|
|||
|
;;; Rackjure style dictionary (when racket-indent-curly-as-sequence is t).
|
|||
|
|
|||
|
{a b
|
|||
|
c d}
|
|||
|
|
|||
|
{a b
|
|||
|
c d
|
|||
|
b '(a x
|
|||
|
s (x y
|
|||
|
x v))}
|
|||
|
|
|||
|
;;; Vector
|
|||
|
|
|||
|
#(a b
|
|||
|
c d)
|
|||
|
|
|||
|
;;; List with a keyword as first member (e.g. in many contracts)
|
|||
|
|
|||
|
(#:x y
|
|||
|
#:y x)
|
|||
|
|
|||
|
;;; Normal function application.
|
|||
|
|
|||
|
(foobar x
|
|||
|
y
|
|||
|
z)
|
|||
|
|
|||
|
(foobar
|
|||
|
x
|
|||
|
y
|
|||
|
z)
|
|||
|
|
|||
|
(dict-set a
|
|||
|
b
|
|||
|
c)
|
|||
|
|
|||
|
(dict-set
|
|||
|
a
|
|||
|
b
|
|||
|
c)
|
|||
|
|
|||
|
(call-with-values (lambda () (values 1 2))
|
|||
|
+)
|
|||
|
|
|||
|
(call-with-values
|
|||
|
(lambda () (values 1 2))
|
|||
|
+)
|
|||
|
|
|||
|
;;; Forms with special indentation
|
|||
|
|
|||
|
(let ([x 0])
|
|||
|
x)
|
|||
|
|
|||
|
;; indent 2
|
|||
|
|
|||
|
(syntax-case stx ()
|
|||
|
[(_ x) #'#f]
|
|||
|
[(_ x y) #'#t])
|
|||
|
|
|||
|
;; indent 3
|
|||
|
|
|||
|
(syntax-case* stx () x
|
|||
|
[(_ x) #'#f]
|
|||
|
[(_ x y) #'#t])
|
|||
|
|
|||
|
(syntax-case*
|
|||
|
stx
|
|||
|
(#%module-begin
|
|||
|
module
|
|||
|
define-values
|
|||
|
define-syntaxes
|
|||
|
define
|
|||
|
define/contract
|
|||
|
define-syntax
|
|||
|
struct
|
|||
|
define-struct)
|
|||
|
x
|
|||
|
[(_ x) #'#f]
|
|||
|
[(_ x y) #'#t])
|
|||
|
|
|||
|
;; begin and cond have 0 style
|
|||
|
(begin
|
|||
|
0
|
|||
|
0)
|
|||
|
|
|||
|
(begin 0
|
|||
|
0)
|
|||
|
|
|||
|
(cond [1 2]
|
|||
|
[3 4])
|
|||
|
|
|||
|
(cond
|
|||
|
[1 2]
|
|||
|
[3 4])
|
|||
|
|
|||
|
(if a
|
|||
|
x
|
|||
|
x)
|
|||
|
|
|||
|
;; begin*
|
|||
|
|
|||
|
(begin-for-foo 0
|
|||
|
0)
|
|||
|
|
|||
|
(begin-for-foo
|
|||
|
0
|
|||
|
0)
|
|||
|
|
|||
|
(with-handlers ([x y])
|
|||
|
a b c)
|
|||
|
|
|||
|
;; def, with-, call-with- and other 'defun style
|
|||
|
|
|||
|
(define (x) x x
|
|||
|
x)
|
|||
|
|
|||
|
(struct x x
|
|||
|
())
|
|||
|
|
|||
|
(match-define (list x y)
|
|||
|
(list 1 2))
|
|||
|
|
|||
|
(with-output-to-file path #:mode 'text #:exists 'replace
|
|||
|
(λ () (display "Hello, world.")))
|
|||
|
|
|||
|
(call-with-output-file path #:mode 'text #:exists 'replace
|
|||
|
(λ (out) (display "Hello, world." out)))
|
|||
|
|
|||
|
|
|||
|
;;; Special forms: When the first non-distinguished form is on the
|
|||
|
;;; same line as distinguished forms, disregard it for indent.
|
|||
|
|
|||
|
;; module has indent 2
|
|||
|
|
|||
|
(module 1
|
|||
|
2
|
|||
|
3
|
|||
|
4
|
|||
|
5)
|
|||
|
|
|||
|
;; Normal case
|
|||
|
(module 1 2
|
|||
|
3
|
|||
|
4
|
|||
|
5)
|
|||
|
|
|||
|
;; Weird case -- but this is how scheme-mode indents it.
|
|||
|
(module 1 2 3
|
|||
|
4
|
|||
|
5)
|
|||
|
|
|||
|
;; Weird case -- but this is how scheme-mode indents it.
|
|||
|
(module 1 2 3 4
|
|||
|
5)
|
|||
|
|
|||
|
;;; for/fold
|
|||
|
|
|||
|
;; for/fold untyped, accum on same line
|
|||
|
(for/fold ([a 0]
|
|||
|
[b 0])
|
|||
|
([x 0]
|
|||
|
[y 0])
|
|||
|
#t)
|
|||
|
|
|||
|
;; for/fold untyped, accum on different line
|
|||
|
(for/fold
|
|||
|
([a 0]
|
|||
|
[b 0])
|
|||
|
([x 0]
|
|||
|
[y 0])
|
|||
|
#t)
|
|||
|
|
|||
|
;; for/fold typed, type on same line
|
|||
|
(for/fold : T
|
|||
|
([a 0]
|
|||
|
[b 0])
|
|||
|
([x 0]
|
|||
|
[y 0])
|
|||
|
#t)
|
|||
|
|
|||
|
;; for/fold typed, type on different line
|
|||
|
(for/fold
|
|||
|
: T
|
|||
|
([a 0]
|
|||
|
[b 0])
|
|||
|
([x 0]
|
|||
|
[y 0])
|
|||
|
#t)
|
|||
|
|
|||
|
;;; Bug #50
|
|||
|
|
|||
|
'((x
|
|||
|
y) A
|
|||
|
z
|
|||
|
(x
|
|||
|
y) A
|
|||
|
z)
|
|||
|
|
|||
|
(match args
|
|||
|
[(list x) (x
|
|||
|
y)] ...
|
|||
|
[(list x) (x y)] ...
|
|||
|
[(list x) (x y)] ...)
|
|||
|
|
|||
|
(define-syntax (fstruct stx)
|
|||
|
(syntax-parse stx
|
|||
|
[(_ id:id (field:id ...))
|
|||
|
(with-syntax ([(accessor ...)
|
|||
|
(for/list ([fld (in-list (syntax->list #'(field ...)))])
|
|||
|
(format-id stx "~a-~a" (syntax->datum #'id) fld))])
|
|||
|
#'(serializable-struct
|
|||
|
id (field ...) #:transparent
|
|||
|
#:property prop:procedure
|
|||
|
(lambda (self . args)
|
|||
|
(match args
|
|||
|
[(list 'field) (accessor self)] ...
|
|||
|
[(list (list 'field)) (accessor self)] ...
|
|||
|
[(list (list-rest 'field fields)) ((accessor self) fields)] ...
|
|||
|
[(list-rest 'field f args)
|
|||
|
(struct-copy id self
|
|||
|
[field (apply f (accessor self) args)])] ...
|
|||
|
[(list-rest (list 'field) f args) ;<-- THIS SEXPR IS INDENTED TOO FAR
|
|||
|
(struct-copy id self
|
|||
|
[field (apply f (accessor self) args)])] ...
|
|||
|
[(list-rest (list-rest 'field fields) args)
|
|||
|
(struct-copy id self
|
|||
|
[field (apply (accessor self) fields args)])] ...))))]))
|
|||
|
|
|||
|
;; Bug #123
|
|||
|
|
|||
|
#hash([a . (#hash()
|
|||
|
0)]
|
|||
|
[b . (#hasheq()
|
|||
|
0)]
|
|||
|
[c . (#fx(0 1 2)
|
|||
|
0)]
|
|||
|
[d . (#fx3(0 1 2)
|
|||
|
0)]
|
|||
|
[e . (#fl(0.0 1.0 2.0)
|
|||
|
0)]
|
|||
|
[f . (#fl3(0.0 1.0 2.0)
|
|||
|
0)]
|
|||
|
[g . (#s(foo x)
|
|||
|
0)]
|
|||
|
[h . (#3(0 1 2)
|
|||
|
0)])
|
|||
|
|
|||
|
;; Bug #136
|
|||
|
|
|||
|
#;(list 1
|
|||
|
#;2
|
|||
|
3)
|
|||
|
|
|||
|
(list 1
|
|||
|
#;(list 1
|
|||
|
(let ([x 2]
|
|||
|
#;[y 3])
|
|||
|
x)
|
|||
|
3)
|
|||
|
2
|
|||
|
3)
|
|||
|
|
|||
|
;; Bug #243
|
|||
|
(cond [x y
|
|||
|
z]
|
|||
|
[(= a x) y
|
|||
|
z])
|
|||
|
|
|||
|
;; Bug #262
|
|||
|
(define-metafunction λL
|
|||
|
∪ : (x ...) ... -> (x ...)
|
|||
|
[(∪ any_ls ...)
|
|||
|
,(apply append (term (any_ls ...)))])
|