Some checks are pending
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (BC, stable) (push) Waiting to run
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (CS, stable) (push) Waiting to run
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (true, BC, current) (push) Waiting to run
CI / Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }}) (true, CS, current) (push) Waiting to run
92 lines
3.7 KiB
Racket
92 lines
3.7 KiB
Racket
#lang racket/base
|
|
|
|
(require (for-syntax racket/base
|
|
"reqprov-transformer.rkt"
|
|
"filters.rkt")
|
|
racket/require-syntax
|
|
racket/provide-syntax)
|
|
|
|
(provide auto-rename-in/out auto-rename-in auto-rename-out
|
|
transform-in/out transform-in transform-out
|
|
|
|
(for-syntax (all-from-out "reqprov-transformer.rkt"
|
|
"filters.rkt")
|
|
(auto-rename-out
|
|
(all-from-out "filters.rkt")
|
|
#:tx (transform/replace #rx"transform/" "tx/"))))
|
|
|
|
(define-syntax auto-rename-in/out (new-auto-rename-transformer values))
|
|
(define-require-syntax (auto-rename-in stx)
|
|
(syntax-case stx [] [(_ . tail) #`(auto-rename-in/out #:derived #,stx . tail)]))
|
|
(define-provide-syntax (auto-rename-out stx)
|
|
(syntax-case stx [] [(_ . tail) #`(auto-rename-in/out #:derived #,stx . tail)]))
|
|
|
|
(define-syntax transform-in/out (make-rename-transformer #'auto-rename-in/out))
|
|
(define-syntax transform-in (make-rename-transformer #'auto-rename-in))
|
|
(define-syntax transform-out (make-rename-transformer #'auto-rename-out))
|
|
|
|
(module+ test
|
|
(define-syntax rust-in
|
|
(make-auto-rename-transformer
|
|
(transform/replace #rx"-" "🚀")
|
|
(transform/replace #rx"\\?" "🤔")
|
|
(transform/replace #rx"!" "💥")))
|
|
|
|
(require (rust-in rackunit racket/base))
|
|
|
|
(module mod racket/base
|
|
(require (submod ".." "..") (for-syntax racket/base racket/string))
|
|
(provide (transform-out abc #:tx (transform/map string-upcase))
|
|
(transform-out ABC #:tx (transform/for x (string-downcase x)))
|
|
(transform-out |def ghi| #:tx (transform/append-map string-split))
|
|
(transform-out jKl #:tx (transform/for* it (list (string-downcase it) (string-upcase it))))
|
|
(rename-out [pqr-1 pqr])
|
|
(transform-out mno1 pqr #:tx (transform/filter (λ (it) (equal? it "mno1"))))
|
|
(transform-out mno2 pqr #:tx (transform/when it (equal? it "mno2")))
|
|
(transform-out mno3 pqr #:tx (transform/remove (λ (it) (equal? it "pqr"))))
|
|
(transform-out mno4 pqr #:tx (transform/unless it (equal? it "pqr")))
|
|
(transform-out stu1 stu2 stu3 pqr #:tx (transform/matches #rx"stu.")))
|
|
(define-values (abc ABC |def ghi| jKl mno1 mno2 mno3 mno4 pqr pqr-1 stu1 stu2 stu3)
|
|
(apply values '(abc ABC d/g jKl mno1 mno2 mno3 mno4 pqr pqr-1 stu1 stu2 stu3))))
|
|
(require 'mod)
|
|
|
|
(check🚀eq🤔 ABC 'abc)
|
|
(check🚀eq🤔 abc 'ABC)
|
|
(check🚀eq🤔 def 'd/g)
|
|
(check🚀eq🤔 ghi 'd/g)
|
|
(check🚀eq🤔 jkl 'jKl)
|
|
(check🚀eq🤔 JKL 'jKl)
|
|
(check🚀equal🤔 (list mno1 mno2 mno3 mno4 pqr)
|
|
'( mno1 mno2 mno3 mno4 pqr-1))
|
|
(check🚀equal🤔 (list stu1 stu2 stu3)
|
|
'( stu1 stu2 stu3))
|
|
|
|
(check🚀equal🤔
|
|
(let ([x 5]) (set💥 x 8) x)
|
|
8)
|
|
|
|
(module english racket/base
|
|
(require (for-syntax "reqprov-transformer.rkt"
|
|
"filters.rkt"
|
|
racket/base))
|
|
(provide for-british)
|
|
(define-syntax for-british
|
|
(make-auto-rename-transformer
|
|
(transform/replace #rx"([yi])ze" "\\1se")
|
|
(transform/replace #rx"center" "centre")
|
|
(transform/replace #rx"defense" "defence")
|
|
(transform/replace #rx"or$" "our"))))
|
|
|
|
(module american🇺🇸🦅 racket/base
|
|
(provide (all-defined-out))
|
|
(define-values (analyze center defense labor organize)
|
|
(values 1 2 3 4 5)))
|
|
(module british🇬🇧🫖 racket/base
|
|
(require (submod ".." english) (submod ".." american🇺🇸🦅))
|
|
(provide (for-british (all-from-out (submod ".." american🇺🇸🦅)))))
|
|
|
|
(require 'british🇬🇧🫖)
|
|
(check🚀not🚀exn (λ () (list analyse centre defence labour)))
|
|
|
|
;
|
|
)
|