made proc/doc recognize ->i contracts
original commit: 711fe506412f45fdbccb84e76fb88622a06050e3
This commit is contained in:
parent
b00ddd6619
commit
189bf9d63c
|
@ -53,12 +53,21 @@
|
||||||
p/c ...
|
p/c ...
|
||||||
(void (quote-syntax (provide/doc (for-docs id) ...)))))))]))
|
(void (quote-syntax (provide/doc (for-docs id) ...)))))))]))
|
||||||
|
|
||||||
|
(define-for-syntax (remove->i-deps stx)
|
||||||
|
(syntax-case stx ()
|
||||||
|
[(id (id2 ...) ctc)
|
||||||
|
#'(id ctc)]
|
||||||
|
[(id ctc)
|
||||||
|
#'(id ctc)]
|
||||||
|
[else
|
||||||
|
(error 'remove->i-deps "unknown thing ~s" stx)]))
|
||||||
|
|
||||||
(define-provide/doc-transformer proc-doc
|
(define-provide/doc-transformer proc-doc
|
||||||
(lambda (stx)
|
(lambda (stx)
|
||||||
(syntax-case stx ()
|
(syntax-case stx ()
|
||||||
[(_ id contract desc)
|
[(_ id contract desc)
|
||||||
(with-syntax ([(header result (body-stuff ...))
|
(with-syntax ([(header result (body-stuff ...))
|
||||||
(syntax-case #'contract (->d -> values)
|
(syntax-case #'contract (->d ->i -> values)
|
||||||
[(->d (req ...) () (values [name res] ...))
|
[(->d (req ...) () (values [name res] ...))
|
||||||
#'((id req ...) (values res ...) ())]
|
#'((id req ...) (values res ...) ())]
|
||||||
[(->d (req ...) () #:pre-cond condition (values [name res] ...))
|
[(->d (req ...) () #:pre-cond condition (values [name res] ...))
|
||||||
|
@ -82,6 +91,42 @@
|
||||||
(format "unsupported ->d contract form for ~a" (syntax->datum #'id))
|
(format "unsupported ->d contract form for ~a" (syntax->datum #'id))
|
||||||
stx
|
stx
|
||||||
#'contract)]
|
#'contract)]
|
||||||
|
|
||||||
|
[(->i (req ...) () (values ress ...))
|
||||||
|
(with-syntax ([(req ...) (map remove->i-deps (syntax->list #'(req ...)))]
|
||||||
|
[([name res] ...) (map remove->i-deps (syntax->list #'(req ...)))])
|
||||||
|
#'((id req ...) (values res ...) ()))]
|
||||||
|
[(->i (req ...) () #:pre (pre-id ...) condition (values ress ...))
|
||||||
|
(with-syntax ([(req ...) (map remove->i-deps (syntax->list #'(req ...)))]
|
||||||
|
[([name res] ...) (map remove->i-deps (syntax->list #'(req ...)))])
|
||||||
|
#'((id req ...) (values res ...) ((bold "Pre-condition: ") (scheme condition) "\n" "\n")))]
|
||||||
|
[(->i (req ...) () res)
|
||||||
|
(with-syntax ([(req ...) (map remove->i-deps (syntax->list #'(req ...)))]
|
||||||
|
[[name res] (remove->i-deps #'res)])
|
||||||
|
#'((id req ...) res ()))]
|
||||||
|
[(->i (req ...) () #:pre (pre-id ...) condition [name res])
|
||||||
|
(with-syntax ([(req ...) (map remove->i-deps (syntax->list #'(req ...)))]
|
||||||
|
[[name res] (remove->i-deps #'res)])
|
||||||
|
#'((id req ...) res ((bold "Pre-condition: ") (scheme condition) "\n" "\n" )))]
|
||||||
|
[(->i (req ...) () #:rest rest res)
|
||||||
|
(with-syntax ([(req ...) (map remove->i-deps (syntax->list #'(req ...)))]
|
||||||
|
[[name res] (remove->i-deps #'res)]
|
||||||
|
[[name-t rest-ctc] (remove->i-deps #'rest)])
|
||||||
|
#'((id req ... [name-t rest-ctc] (... ...)) res ()))]
|
||||||
|
[(->i (req ...) (one more ...) whatever)
|
||||||
|
(raise-syntax-error
|
||||||
|
#f
|
||||||
|
(format "unsupported ->i contract form for ~a, optional arguments non-empty, must use proc-doc/names"
|
||||||
|
(syntax->datum #'id))
|
||||||
|
stx
|
||||||
|
#'contract)]
|
||||||
|
[(->i whatever ...)
|
||||||
|
(raise-syntax-error
|
||||||
|
#f
|
||||||
|
(format "unsupported ->i contract form for ~a" (syntax->datum #'id))
|
||||||
|
stx
|
||||||
|
#'contract)]
|
||||||
|
|
||||||
[(-> result)
|
[(-> result)
|
||||||
#'((id) result ())]
|
#'((id) result ())]
|
||||||
[(-> whatever ...)
|
[(-> whatever ...)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user