clj-refactor.el icon indicating copy to clipboard operation
clj-refactor.el copied to clipboard

cljr-promote-function issues

Open yuhan0 opened this issue 4 years ago • 1 comments

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
#(foo %)
  • Does not support certain combinations of nested forms and multiple % args
(comment
  #(foo % (bar %2))
  )

;; => 

(comment
  (fn [a] (foo a (bar a2)))
  )
  • Enters a loop when a string contains "%"
(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

yuhan0 avatar Nov 16 '21 08:11 yuhan0

The cljr-promote-function command could delegate to it in the #()->fn case, replacing the current implementation while keeping the fn->defn logic.

Fine by me. PR welcome!

bbatsov avatar Jan 02 '22 09:01 bbatsov