Added require and provide transformers expander-in and expander-out

This commit is contained in:
Georges Dupéron 2016-08-22 20:12:30 +02:00
parent 52d7492253
commit 5159829930
4 changed files with 63 additions and 0 deletions

View File

@ -4,3 +4,4 @@
"private/define-expanders.rkt"
"private/scoped-transformers.rkt"
"private/define-scoped-transformers.rkt"
"private/reqprov.rkt"

View File

@ -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"]

35
private/reqprov.rkt Normal file
View File

@ -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))]))

26
private/reqprov.scrbl Normal file
View File

@ -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}}]}