Transform Clojure naming conventions to those of JavaScript.
More precisely, these transformations:
dash-delimited ;=> dashDelimited
set! ;=> set
*dynamic* ;=> dynamic
**private** ;=> __private__
all-humans-are-created=and-free ;=> allHumansAreCreatedEqualAndFree
apples+oranges ;=> applesPlusOranges
even? ;=> isEven
rope->str ;=> ropeToStr
rope<-str ;=> ropeFromStr
Using Clojure/Lisp symbol names in ClojureScript but exporting them as idiomatic JavaScript symbols feels like the Right Thing. It also felt a bit tedious, so I created this little library.
Add the following entry to your project.clj :dependencies
vector:
Then, in your code, you can do these things:
(ns js-friendly
(:require [js-idiomatic-symbols.core :as jsid])
(:require-macros [js-idiomatic-symbols.macros :as jsidm]))
;; Of course, the whole thing is based on messing with strings...
(jsid/js-idiomatize-str "this<-me->you?!") ;=> "isThisFromMeToYou"
;; ... but symbol manipulation is more important:
(jsid/js-idiomatize-sym 'this<-me->you?!) ;=> 'isThisFromMeToYou
;; You might ensure js-formatted names up front:
(jsidm/defjs-idiomatic this<-me->you?! "Love, love, love.")
isThisFromMeToYou ;=> "Love, love, love."
this<-me->you?! ; note that this will not be defined at all
;; Or you might just write normal ClojureScript
(def not->disencourage "But it's NOT so easy.")
;;; ...
;; ... and then define additional symbols for the public (JavaScript) API:
(jsidm/defjs-idiomatic-export not->disencourage)
notToDisencourage ;=> "But it's NOT so easy."
;;; Both macros also add the ^:export metadata for you.
And that's all there is to this.
The inspiration for this project can be largely attributed to Gozala's Wisp. Specifically, this part.
Copyright © 2014 Pauli Jaakkola
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.