Use braces for patterns
This commit is contained in:
parent
6f22dcf465
commit
643988a0b9
|
@ -18,14 +18,14 @@
|
||||||
|
|
||||||
(define-eh-alternative-mixin structure-kw-instance-or-builder
|
(define-eh-alternative-mixin structure-kw-instance-or-builder
|
||||||
(pattern
|
(pattern
|
||||||
(~optional (~and instance-or-builder
|
{~optional {~and instance-or-builder
|
||||||
(~or (~global-or instance #:instance)
|
{~or {~global-or instance #:instance}
|
||||||
(~global-or builder #:builder)))
|
{~global-or builder #:builder}}}
|
||||||
#:name "either #:instance or #:builder")))
|
#:name "either #:instance or #:builder"}))
|
||||||
|
|
||||||
(define-eh-alternative-mixin structure-kw-predicate
|
(define-eh-alternative-mixin structure-kw-predicate
|
||||||
(pattern (~optional (~seq #:? predicate:id)
|
(pattern {~optional {~seq #:? predicate:id}
|
||||||
#:name "#:? predicate")))
|
#:name "#:? predicate"}))
|
||||||
|
|
||||||
(define-and-for-syntax no-values-err
|
(define-and-for-syntax no-values-err
|
||||||
(~a "The #:instance keyword implies the use of [field value],"
|
(~a "The #:instance keyword implies the use of [field value],"
|
||||||
|
@ -41,21 +41,21 @@
|
||||||
|
|
||||||
(define-eh-alternative-mixin structure-kw-fields
|
(define-eh-alternative-mixin structure-kw-fields
|
||||||
(pattern
|
(pattern
|
||||||
(~optional/else
|
{~optional/else
|
||||||
(~or (~seq (~or-bug [field:id] field:id) …+
|
{~or {~seq {~or-bug [field:id] field:id} …+
|
||||||
(~global-or builder)
|
{~global-or builder}
|
||||||
(~post-fail no-values-err #:when (attribute instance)))
|
{~post-fail no-values-err #:when (attribute instance)}}
|
||||||
(~seq [field:id : type] …+
|
{~seq [field:id : type] …+
|
||||||
(~global-or builder)
|
{~global-or builder}
|
||||||
(~post-fail no-values-err #:when (attribute instance)))
|
{~post-fail no-values-err #:when (attribute instance)}}
|
||||||
(~seq [field:id value:expr] …+
|
{~seq [field:id value:expr] …+
|
||||||
(~global-or instance)
|
{~global-or instance}
|
||||||
(~post-fail values-err #:when (attribute builder)))
|
{~post-fail values-err #:when (attribute builder)}}
|
||||||
(~seq (~or-bug [field:id value:expr : type]
|
{~seq {~or-bug [field:id value:expr : type]
|
||||||
[field:id : type value:expr])
|
[field:id : type value:expr]}
|
||||||
…+
|
…+
|
||||||
(~global-or instance)
|
{~global-or instance}
|
||||||
(~post-fail values-err #:when (attribute builder))))
|
{~post-fail values-err #:when (attribute builder)}}}
|
||||||
#:defaults ([(field 1) (list)]
|
#:defaults ([(field 1) (list)]
|
||||||
[(value 1) (list)]
|
[(value 1) (list)]
|
||||||
[(type 1) (list)])
|
[(type 1) (list)])
|
||||||
|
@ -63,17 +63,17 @@
|
||||||
(not (attribute instance)))
|
(not (attribute instance)))
|
||||||
#:name (~a "field or [field] or [field : type] for #:builder,"
|
#:name (~a "field or [field] or [field : type] for #:builder,"
|
||||||
" [field value] or [field : type value]"
|
" [field value] or [field : type value]"
|
||||||
" or [field value : type] for #:instance"))))
|
" or [field value : type] for #:instance")}))
|
||||||
|
|
||||||
(define-eh-alternative-mixin structure-kw-all
|
(define-eh-alternative-mixin structure-kw-all
|
||||||
(pattern (~or (structure-kw-instance-or-builder-mixin)
|
(pattern {~or {structure-kw-instance-or-builder-mixin}
|
||||||
(structure-kw-predicate-mixin)
|
{structure-kw-predicate-mixin}
|
||||||
(structure-kw-fields-mixin))))
|
{structure-kw-fields-mixin}}))
|
||||||
|
|
||||||
;; ---------
|
;; ---------
|
||||||
|
|
||||||
(define-splicing-syntax-class structure-kws
|
(define-splicing-syntax-class structure-kws
|
||||||
(pattern (~seq-no-order (structure-kw-all-mixin))))
|
(pattern {~seq-no-order {structure-kw-all-mixin}}))
|
||||||
|
|
||||||
(check-equal? (syntax-parse #'(#:instance #:? p)
|
(check-equal? (syntax-parse #'(#:instance #:? p)
|
||||||
[(:structure-kws)
|
[(:structure-kws)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user