auto-rename/main.rkt
eutro da8298d864
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
Initial commit
2025-04-01 18:22:20 +01:00

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)))
;
)