clojure-emacs / clojure-emacs/clj-refactor.el

cljr-promote-function issues

Open
#505 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.