Merge pull request #7 from jsmaniac/reqprov
Adds require and provide transformers expander-in and expander-out
This commit is contained in:
commit
4df442f59f
1
main.rkt
1
main.rkt
|
@ -4,3 +4,4 @@
|
||||||
"private/define-expanders.rkt"
|
"private/define-expanders.rkt"
|
||||||
"private/scoped-transformers.rkt"
|
"private/scoped-transformers.rkt"
|
||||||
"private/define-scoped-transformers.rkt"
|
"private/define-scoped-transformers.rkt"
|
||||||
|
"private/reqprov.rkt"
|
|
@ -25,3 +25,4 @@ extensible.
|
||||||
@include-section["private/define-expanders.scrbl"]
|
@include-section["private/define-expanders.scrbl"]
|
||||||
@include-section["private/scoped-transformers.scrbl"]
|
@include-section["private/scoped-transformers.scrbl"]
|
||||||
@include-section["private/define-scoped-transformers.scrbl"]
|
@include-section["private/define-scoped-transformers.scrbl"]
|
||||||
|
@include-section["private/reqprov.scrbl"]
|
||||||
|
|
34
private/reqprov.rkt
Normal file
34
private/reqprov.rkt
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#lang racket/base
|
||||||
|
|
||||||
|
(require racket/require-syntax
|
||||||
|
racket/provide-syntax
|
||||||
|
(for-syntax racket/base
|
||||||
|
racket/provide-transform
|
||||||
|
racket/syntax
|
||||||
|
syntax/parse))
|
||||||
|
|
||||||
|
(provide expander-in
|
||||||
|
expander-out)
|
||||||
|
|
||||||
|
(define-for-syntax (reqprov-transformer2 id combiner prefix)
|
||||||
|
(with-syntax
|
||||||
|
([id-expander-type (format-id id "~a-expander-type" id)]
|
||||||
|
[make-id-expander (format-id id "make-~a-expander" id)]
|
||||||
|
[id-expander? (format-id id "~a-expander?" id)]
|
||||||
|
[define-id-expander (format-id id "define-~a-expander" id)]
|
||||||
|
[expand-all-id-expanders (format-id id "expand-all-~a-expanders" id)])
|
||||||
|
#`(#,combiner (for-syntax (#,@prefix id-expander-type))
|
||||||
|
(for-syntax (#,@prefix make-id-expander))
|
||||||
|
(for-syntax (#,@prefix id-expander?))
|
||||||
|
(#,@prefix define-id-expander)
|
||||||
|
(for-syntax (#,@prefix expand-all-id-expanders)))))
|
||||||
|
|
||||||
|
(define-require-syntax expander-in
|
||||||
|
(syntax-parser
|
||||||
|
[(_ require-spec id:id)
|
||||||
|
(reqprov-transformer2 #'id #'combine-in #'(only-in require-spec))]))
|
||||||
|
|
||||||
|
(define-provide-syntax expander-out
|
||||||
|
(syntax-parser
|
||||||
|
[(_ id:id)
|
||||||
|
(reqprov-transformer2 #'id #'combine-out #'(combine-out))]))
|
27
private/reqprov.scrbl
Normal file
27
private/reqprov.scrbl
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#lang scribble/manual
|
||||||
|
@(require "doc-util.rkt")
|
||||||
|
|
||||||
|
@title{@racket[require] and @racket[provide] transformers}
|
||||||
|
|
||||||
|
@defform[#:kind "require transformer"
|
||||||
|
(expander-in require-spec id)]{
|
||||||
|
This @techlink[#:doc '(lib "scribblings/reference/reference.scrbl")]{
|
||||||
|
require transformer} imports from @racket[require-spec]
|
||||||
|
the identifiers defined by
|
||||||
|
@racket[(define-expander-type id)]:
|
||||||
|
@itemlist[@item{@tt{@emph{id}-expander-type}}
|
||||||
|
@item{@tt{make-@emph{id}-expander}}
|
||||||
|
@item{@tt{@emph{id}-expander?}}
|
||||||
|
@item{@tt{define-@emph{id}-expander}}
|
||||||
|
@item{@tt{expand-all-@emph{id}-expanders}}]}
|
||||||
|
|
||||||
|
@defform[#:kind "provide transformer"
|
||||||
|
(expander-out id)]{
|
||||||
|
This @techlink[#:doc '(lib "scribblings/reference/reference.scrbl")]{
|
||||||
|
provide transformer} exports the identifiers defined by
|
||||||
|
@racket[(define-expander-type id)]:
|
||||||
|
@itemlist[@item{@tt{@emph{id}-expander-type}}
|
||||||
|
@item{@tt{make-@emph{id}-expander}}
|
||||||
|
@item{@tt{@emph{id}-expander?}}
|
||||||
|
@item{@tt{define-@emph{id}-expander}}
|
||||||
|
@item{@tt{expand-all-@emph{id}-expanders}}]}
|
Loading…
Reference in New Issue
Block a user