commit 4df442f59f12ca7bbb97cbfad22e3635f8dd9e59
parent 0a9b106e224beb5475b27c1b6a606a63adbfb93f
Author: Jack Firth <jackhfirth@gmail.com>
Date: Tue, 23 Aug 2016 21:54:12 -0700
Merge pull request #7 from jsmaniac/reqprov
Adds require and provide transformers expander-in and expander-out
Diffstat:
4 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/main.rkt b/main.rkt
@@ -4,3 +4,4 @@
"private/define-expanders.rkt"
"private/scoped-transformers.rkt"
"private/define-scoped-transformers.rkt"
+"private/reqprov.rkt"
+\ No newline at end of file
diff --git a/main.scrbl b/main.scrbl
@@ -25,3 +25,4 @@ extensible.
@include-section["private/define-expanders.scrbl"]
@include-section["private/scoped-transformers.scrbl"]
@include-section["private/define-scoped-transformers.scrbl"]
+@include-section["private/reqprov.scrbl"]
diff --git a/private/reqprov.rkt b/private/reqprov.rkt
@@ -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))]))
+\ No newline at end of file
diff --git a/private/reqprov.scrbl b/private/reqprov.scrbl
@@ -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}}]}
+\ No newline at end of file