Rewrite utilities for refactoring clojure files.
Mostly a collection of useful extensions written on top of rewrite-clj
.
This is an experimental alpha-stage library that is sure to have many bugs and coverage issues. Please be patient and feel free to contribute issues and fixes.
current version:
docs: Found on cljdoc
In the umschreiben-clj.requires
namespace you'll find:
Replaces the require of the namespace <from>
with <to>
, also replacing all usages of <from>
accordingly to <to>
, applying alias and :refer symbols if they are present.
Able to add a require to the list of requires of a namespace. If the namespace being added already exists in the list of requires, add
behaves like replace
.
in the umschreiben-clj.variables
namespace you'll find:
Allows one to rename a variable that may or may not have also live in a new namespace.
(umschreiben-clj.variables/rename ..node-representation-of-clj-ns.. 'clojure.string/join 'my-join '[my.helpers :as helpers])
run on
(ns rename-example
(:require [clojure.string :as str]))
(str/join ["hello" "world"])
results in
(ns rename-example
(:require [clojure.string :as str] ;; left in-place in case other usages are present
[my.helpers :as helpers]))
(helpers/join ["hello" "world"])
Depending on the structure of the namespaces :require
s the behavior of umschreiben-clj.variables/rename
differs widely so we encourage one to check out the examples in the test suite and also play around with it yourself.
Renaming variables that are required using :refer
has limited support and isn't recommended.
Since umschreiben-clj
doesn't consider binding information, renaming un-namespaced variables that are :refer
'ed from other namespaces can conflict with local variable bindings.
For example, running (umschreiben-clj.variables/rename ..node-of-code-below.. 'clojure.string/join 'my-join '[my.helpers :as helpers])
on:
(ns shadowing-issue
(:require [clojure.string :refer [join]]))
(let [join "hello world"]
(println join))
currently results in the incorrect result:
(ns shadowing-issue
(:require clojure.string
[my.helpers :as helpers]))
(let [helpers/join "hello world"]
(println helpers/join))
At Nubank this library, used in conjuction with ordnungsamt
, allows us to realize namespace and function deprecations across hundreds of Clojure repositories
Please feel encouraged to contribute to this library by either opening an issue or contributing a patch.
If you introduce a new feature please provide test coverage of it.
Tests can be run using:
lein test
Before opening a pull request, please check that the linter is happy
lein lint
One can apply lint fixes via
lein lint-fix