325 lines
5.2 KiB
Racket
325 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 ...)))])
|