clojure-emacs / clojure-emacs/clj-refactor.el
cljr-promote-function issues
- Dominant language
- Emacs Lisp
- Stars
- 785
- Forks
- 110
- PR merge metrics
- No merged PRs in 30d
Description
## Expected/Actual behavior
There appear to be several issues with the implementation of `cljr--promote-function-literal` (the `#() -> fn` case of cljr-promote-function)
- Throws a "unbalanced parantheses" error when the #() form is at top level
```clj
#(foo %)
```
- Does not support certain combinations of nested forms and multiple % args
```clj
(comment
#(foo % (bar %2))
)
;; =>
(comment
(fn [a] (foo a (bar a2)))
)
```
- Enters a loop when a string contains "%"
```clj
(comment
#(str "%%" %)
)
```
I've proposed an alternative implementation of this feature in https://github.com/clojure-emacs/clojure-mode/pull/601.
The `cljr-promote-function` command could delegate to it in the `#()->fn` case, replacing the current implementation while keeping the `fn->defn` logic.
## Environment & Version information
### clj-refactor.el version information
3.0.0alpha13
### CIDER version information
```
;; CIDER 1.2.0snapshot, nREPL 0.8.3
;; Clojure 1.10.3, Java 13.0.2
```
### Leiningen or Boot version
### Emacs version
28.1
### Operating system
macOS
Contributor guide
Assessment
This issue has not been assessed yet.