«m:;; »«x:-*- racket-indent-sequence-depth: 100; racket-indent-curly-as-sequence: t; -*-
»
«m:;;; »«x:NOTE: After changing this file you will need to M-x faceup-write-file
»«m:;;; »«x:to regenerate the .faceup test comparison file.
»«m:;;;»«x:
»«m:;;; »«x:NOTE: You may need to disable certain features -- for example
»«m:;;; »«x:global-paren-face-mode -- during the M-x faceup-write-file.
»
«m:;;; »«x:Quoted list
»
'(a b
  (a b
   c))

'((«:racket-selfeval-face:1») «:racket-selfeval-face:2» «:racket-selfeval-face:3»
  («:racket-selfeval-face:3»)
  «:racket-selfeval-face:4» «:racket-selfeval-face:5»)

«m:;;; »«x:Quasiquoted list (align with head) and unquote or unquote-splicing
»«m:;;; »«x:(use normal indent rules for the form).
»
`(Part ()
  (PartNumber ()
   ,part)
  (ETag ()
   ,etag))

`((,(x)
   ,y))

`(Delete
  ,@(«k:for/list» ([p («k:in-list» paths)])
      `(«t:Object» ()
        (Key () ,p))))

«m:;;; »«x:Syntax
»
#'(«k:for/list» ([x xs])
    x)

#`(«k:for/list» ([x xs])
    x)

#'(«k:#%app» («k:#%app» «b:hasheq» («k:quote» a) («k:quote» «:racket-selfeval-face:42»))
         («k:quote» a))

(«k:#%app» («k:#%app» «b:hasheq» («k:quote» a) («k:quote» «:racket-selfeval-face:42»))
       («k:quote» a))

#'(foo («k:#%app» «b:hasheq» («k:quote» a) («k:quote» «:racket-selfeval-face:42»))
       («k:quote» a))

«m:;;; »«x: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))}

«m:;;; »«x:Vector
»
#(a b
  c d)

«m:;;; »«x:List with a keyword as first member (e.g. in many contracts)
»
(«:racket-keyword-argument-face:#:x» y
 «:racket-keyword-argument-face:#:y» x)

«m:;;; »«x:Normal function application.
»
(foobar x
        y
        z)

(foobar
 x
 y
 z)

(«b:dict-set» a
          b
          c)

(«b:dict-set»
 a
 b
 c)

(«b:call-with-values» («k:lambda» () («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»))
                  «b:+»)

(«b:call-with-values»
 («k:lambda» () («b:values» «:racket-selfeval-face:1» «:racket-selfeval-face:2»))
 «b:+»)

«m:;;; »«x:Forms with special indentation
»
(«k:let» ([«v:x» «:racket-selfeval-face:0»])
  x)

«m:;; »«x:indent 2
»
(«k:syntax-case» stx ()
  [(«k:_» x) #«:racket-selfeval-face:'#f»]
  [(«k:_» x y) #«:racket-selfeval-face:'#t»])

«m:;; »«x:indent 3
»
(«k:syntax-case*» stx () x
  [(«k:_» x) #«:racket-selfeval-face:'#f»]
  [(«k:_» x y) #«:racket-selfeval-face:'#t»])

(«k:syntax-case*»
    stx
    («k:#%module-begin»
     «k:module»
     «k:define-values»
     «k:define-syntaxes»
     «k:define»
     «b:define/contract»
     «k:define-syntax»
     «k:struct»
     «k:define-struct»)
    x
  [(«k:_» x) #«:racket-selfeval-face:'#f»]
  [(«k:_» x y) #«:racket-selfeval-face:'#t»])

«m:;; »«x:begin and cond have 0 style
»(«k:begin»
  «:racket-selfeval-face:0»
  «:racket-selfeval-face:0»)

(«k:begin» «:racket-selfeval-face:0»
       «:racket-selfeval-face:0»)

(«k:cond» [«:racket-selfeval-face:1» «:racket-selfeval-face:2»]
      [«:racket-selfeval-face:3» «:racket-selfeval-face:4»])

(«k:cond»
  [«:racket-selfeval-face:1» «:racket-selfeval-face:2»]
  [«:racket-selfeval-face:3» «:racket-selfeval-face:4»])

(«k:if» a
    x
    x)

«m:;; »«x:begin*
»
(begin-for-foo «:racket-selfeval-face:0»
               «:racket-selfeval-face:0»)

(begin-for-foo
  «:racket-selfeval-face:0»
  «:racket-selfeval-face:0»)

(«k:with-handlers» ([x y])
  a b c)

«m:;; »«x:def, with-, call-with- and other 'defun style
»
(«k:define» («f:x») x x
  x)

(«k:struct» x x
  ())

(«b:match-define» («b:list» x y)
  («b:list» «:racket-selfeval-face:1» «:racket-selfeval-face:2»))

(«k:with-output-to-file» path «:racket-keyword-argument-face:#:mode» «:racket-selfeval-face:'text» «:racket-keyword-argument-face:#:exists» «:racket-selfeval-face:'replace»
  («k:λ» () («b:display» «s:"Hello, world."»)))

(«k:call-with-output-file» path «:racket-keyword-argument-face:#:mode» «:racket-selfeval-face:'text» «:racket-keyword-argument-face:#:exists» «:racket-selfeval-face:'replace»
  («k:λ» (out) («b:display» «s:"Hello, world."» out)))


«m:;;; »«x:Special forms: When the first non-distinguished form is on the
»«m:;;; »«x:same line as distinguished forms, disregard it for indent.
»
«m:;; »«x:module has indent 2
»
(«k:module» «:racket-selfeval-face:1»
    «:racket-selfeval-face:2»
  «:racket-selfeval-face:3»
  «:racket-selfeval-face:4»
  «:racket-selfeval-face:5»)

«m:;; »«x:Normal case
»(«k:module» «:racket-selfeval-face:1» «:racket-selfeval-face:2»
  «:racket-selfeval-face:3»
  «:racket-selfeval-face:4»
  «:racket-selfeval-face:5»)

«m:;; »«x:Weird case -- but this is how scheme-mode indents it.
»(«k:module» «:racket-selfeval-face:1» «:racket-selfeval-face:2» «:racket-selfeval-face:3»
        «:racket-selfeval-face:4»
        «:racket-selfeval-face:5»)

«m:;; »«x:Weird case -- but this is how scheme-mode indents it.
»(«k:module» «:racket-selfeval-face:1» «:racket-selfeval-face:2» «:racket-selfeval-face:3» «:racket-selfeval-face:4»
        «:racket-selfeval-face:5»)

«m:;;; »«x:for/fold
»
«m:;; »«x:for/fold untyped, accum on same line
»(«k:for/fold» ([a «:racket-selfeval-face:0»]
           [b «:racket-selfeval-face:0»])
          ([x «:racket-selfeval-face:0»]
           [y «:racket-selfeval-face:0»])
  «:racket-selfeval-face:#t»)

«m:;; »«x:for/fold untyped, accum on different line
»(«k:for/fold»
    ([a «:racket-selfeval-face:0»]
     [b «:racket-selfeval-face:0»])
    ([x «:racket-selfeval-face:0»]
     [y «:racket-selfeval-face:0»])
  «:racket-selfeval-face:#t»)

«m:;; »«x:for/fold typed, type on same line
»(«k:for/fold» «b::» T
    ([a «:racket-selfeval-face:0»]
     [b «:racket-selfeval-face:0»])
    ([x «:racket-selfeval-face:0»]
     [y «:racket-selfeval-face:0»])
  «:racket-selfeval-face:#t»)

«m:;; »«x:for/fold typed, type on different line
»(«k:for/fold»
    «b::» T
    ([a «:racket-selfeval-face:0»]
     [b «:racket-selfeval-face:0»])
    ([x «:racket-selfeval-face:0»]
     [y «:racket-selfeval-face:0»])
  «:racket-selfeval-face:#t»)

«m:;;; »«x:Bug #50
»
'((x
   y) A
  z
  (x
   y) A
  z)

(«b:match» args
  [(«b:list» x) (x
             y)] «k:...»
  [(«b:list» x) (x y)] «k:...»
  [(«b:list» x) (x y)] «k:...»)

(«k:define-syntax» («f:fstruct» stx)
  («b:syntax-parse» stx
    [(«k:_» id:id (field:id «k:...»))
     («k:with-syntax» ([(accessor «k:...»)
                    («k:for/list» ([fld («k:in-list» («b:syntax->list» #'(«b:field» «k:...»)))])
                      («b:format-id» stx «s:"~a-~a"» («b:syntax->datum» #«:racket-selfeval-face:'id») fld))])
       #'(serializable-struct
          id («b:field» «k:...») «:racket-keyword-argument-face:#:transparent»
          «:racket-keyword-argument-face:#:property» «b:prop:procedure»
          («k:lambda» (self . args)
            («b:match» args
              [(«b:list» «:racket-selfeval-face:'field») (accessor self)] «k:...»
              [(«b:list» («b:list» «:racket-selfeval-face:'field»)) (accessor self)] «k:...»
              [(«b:list» (list-rest «:racket-selfeval-face:'field» fields)) ((accessor self) fields)] «k:...»
              [(list-rest «:racket-selfeval-face:'field» f args)
               («k:struct-copy» id self
                            [«b:field» («k:apply» f (accessor self) args)])] «k:...»
              [(list-rest («b:list» «:racket-selfeval-face:'field») f args)  «m:;»«x:<-- THIS SEXPR IS INDENTED TOO FAR
»               («k:struct-copy» id self
                            [«b:field» («k:apply» f (accessor self) args)])] «k:...»
              [(list-rest (list-rest «:racket-selfeval-face:'field» fields) args)
               («k:struct-copy» id self
                            [«b:field» («k:apply» (accessor self) fields args)])] «k:...»))))]))

«m:;; »«x:Bug #123
»
#hash([a . (#hash()
            «:racket-selfeval-face:0»)]
      [b . (#hasheq()
            «:racket-selfeval-face:0»)]
      [c . (#fx(«:racket-selfeval-face:0» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)
            «:racket-selfeval-face:0»)]
      [d . (#fx3(«:racket-selfeval-face:0» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)
            «:racket-selfeval-face:0»)]
      [e . (#fl(«:racket-selfeval-face:0.0» «:racket-selfeval-face:1.0» «:racket-selfeval-face:2.0»)
            «:racket-selfeval-face:0»)]
      [f . (#fl3(«:racket-selfeval-face:0.0» «:racket-selfeval-face:1.0» «:racket-selfeval-face:2.0»)
            «:racket-selfeval-face:0»)]
      [g . (#s(foo x)
            «:racket-selfeval-face:0»)]
      [h . (#3(«:racket-selfeval-face:0» «:racket-selfeval-face:1» «:racket-selfeval-face:2»)
            «:racket-selfeval-face:0»)])

«m:;; »«x:Bug #136
»
«m:#;»«x:(list 1
        #;2
        3)»

(«b:list» «:racket-selfeval-face:1»
      «m:#;»«x:(list 1
              (let ([x 2]
                    #;[y 3])
                x)
              3)»
      «:racket-selfeval-face:2»
      «:racket-selfeval-face:3»)

«m:;; »«x:Bug #243
»(«k:cond» [x y
         z]
      [(«b:=» a x) y
               z])

«m:;; »«x:Bug #262
»(define-metafunction «v:λL»
  ∪ «b::» (x «k:...») «k:...» «b:->» (x «k:...»)
  [(∪ any_ls «k:...»)
   ,(«k:apply» «b:append» (term (any_ls «k:...»)))])
