clojure-emacs / clj-refactor.el

A CIDER extension that provides powerful commands for refactoring Clojure code.
GNU General Public License v3.0
771 stars 111 forks source link

cljr-add-project-dependency Fails on Some deps.edn #470

Closed hindol closed 3 years ago

hindol commented 4 years ago

Expected behavior

clj-refactor.el should be able to handle all valid deps.edn

Actual behavior

cljr-add-project-dependency fails on some deps.edn. Have not quite figured out what triggers this.

Steps to reproduce the problem

Used clj-new to create a new lib project. It failed on this deps.edn.

{:paths ["src" "resources"]
 :deps  {org.clojure/clojure {:mvn/version "1.10.1"}}
 :aliases
 {:test    {:extra-paths ["test"]
            :extra-deps  {org.clojure/test.check {:mvn/version "1.0.0"}}}
  :runner
  {:extra-deps {com.cognitect/test-runner
                {:git/url "https://github.com/cognitect-labs/test-runner"
                 :sha     "f7ef16dc3b8332b0d77bc0274578ad5270fbfedd"}}
   :main-opts  ["-m" "cognitect.test-runner"
               "-d" "test"]}
  :jar     {:extra-deps {seancorfield/depstar {:mvn/version "1.0.94"}}
            :main-opts  ["-m" "hf.depstar.jar" "json-rpc.jar"]}
  :install {:extra-deps {deps-deploy {:mvn/version "0.0.9"}}
            :main-opts  ["-m" "deps-deploy.deps-deploy" "install" "json-rpc.jar"]}
  :deploy  {:extra-deps {deps-deploy {:mvn/version "0.0.9"}}
            :main-opts  ["-m" "deps-deploy.deps-deploy" "deploy" "json-rpc.jar"]}}}

Environment & Version information

clj-refactor.el version information

clj-refactor 2.5.0, refactor-nrepl 2.5.0

CIDER version information

;; CIDER 0.25.0snapshot, nREPL 0.7.0
;; Clojure 1.10.1, Java 14.0.1

Leiningen or Boot version

clojure: stable 1.10.1.536

Emacs version

GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.18, cairo version 1.16.0) of 2020-05-25

Operating system

Windows 10, Emacs running under WSL 2/Ubuntu 20.04.

jp887 commented 4 years ago

I'm having a similar issue, also with a project created by clj-new. In my case I tracked it to the fact that clj-new generates a pom.xml as well as the deps.edn, and clj-refactor doesn't appear to handle multiple project files: https://github.com/clojure-emacs/clj-refactor.el/blob/6db85b37b57497b56d97d5e5512160e5db85f798/clj-refactor.el#L828-L839 First wins, so this returns pom.xml instead of deps.edn causing cljr-add-project-dependency to default to executing the Lein/Boot project code which fails when it cant find a :dependencies key in pom.xml.

Renaming pom.xml enabled me to use the refactoring, but this seems like a bug.