commit 51598299301a8285902f51101a1b35c9954ebb9b
parent 52d7492253ddc3061ad601ab8a569b2b40609aa5
Author: Georges Dupéron <georges.duperon@gmail.com>
Date: Mon, 22 Aug 2016 20:12:30 +0200
Added 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,35 @@
+#lang racket/base
+
+(require racket/require-syntax
+ racket/provide-syntax
+ (for-syntax racket/base
+ racket/provide-transform
+ racket/syntax))
+
+(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 stx)
+ (syntax-case stx ()
+ [(_ id modpath)
+ (identifier? #'id)
+ (reqprov-transformer2 #'id #'combine-in #'(only-in modpath))]))
+
+(define-provide-syntax (expander-out stx)
+ (syntax-case stx ()
+ [(_ id)
+ (identifier? #'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,26 @@
+#lang scribble/manual
+@(require "doc-util.rkt")
+
+@title{@racket[require] and @racket[provide] transformers}
+
+@defform[#:kind "require transformer"
+ (expander-in id)]{
+ This @techlink[#:doc '(lib "scribblings/reference/reference.scrbl")]{
+ require transformer} imports 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