lein-ns-dep-graph icon indicating copy to clipboard operation
lein-ns-dep-graph copied to clipboard

No such var: ns-find/cljs

Open eggsyntax opened this issue 8 years ago • 4 comments

Hi! I've got [lein-ns-dep-graph "0.2.0-SNAPSHOT"] in ~/.lein/profiles.clj. dot -V shows version 2.38.0. But I get the following error when running lein ns-dep-graph.

No urgency on my part; mainly just wanted to let you know.

As a wild guess of what might be going on -- the project has only .cljc files, no .clj or .cljs. Not sure whether lein-ns-dep-graph takes cljc into account.

Thanks! While it's not working now, I've gotten good use out of it in the past :)

[12:28] datawalk> lein ns-dep-graph
clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: No such var: ns-find/cljs, compiling:(leiningen/ns_dep_graph.clj:33:18)
 at clojure.lang.Compiler.analyze (Compiler.java:6688)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler$CaseExpr$Parser.parse (Compiler.java:8756)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6001)
    clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6319)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.access$300 (Compiler.java:38)
    clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6269)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6001)
    clojure.lang.Compiler$FnMethod.parse (Compiler.java:5380)
    clojure.lang.Compiler$FnExpr.parse (Compiler.java:3972)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6866)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.access$300 (Compiler.java:38)
    clojure.lang.Compiler$DefExpr$Parser.parse (Compiler.java:589)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler.eval (Compiler.java:6931)
    clojure.lang.Compiler.load (Compiler.java:7379)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.loadResourceScript (RT.java:363)
    clojure.lang.RT.load (RT.java:453)
    clojure.lang.RT.load (RT.java:419)
    clojure.core$load$fn__5677.invoke (core.clj:5893)
    clojure.core$load.invokeStatic (core.clj:5892)
    clojure.core$load.doInvoke (core.clj:5876)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5697)
    clojure.core$load_one.invoke (core.clj:5692)
    clojure.core$load_lib$fn__5626.invoke (core.clj:5737)
    clojure.core$load_lib.invokeStatic (core.clj:5736)
    clojure.core$load_lib.doInvoke (core.clj:5717)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:648)
    clojure.core$load_libs.invokeStatic (core.clj:5774)
    clojure.core$load_libs.doInvoke (core.clj:5758)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:648)
    clojure.core$require.invokeStatic (core.clj:5796)
    clojure.core$require.doInvoke (core.clj:5796)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    leiningen.core.utils$require_resolve.invokeStatic (utils.clj:91)
    leiningen.core.utils$require_resolve.invoke (utils.clj:84)
    leiningen.core.utils$require_resolve.invokeStatic (utils.clj:94)
    leiningen.core.utils$require_resolve.invoke (utils.clj:84)
    leiningen.core.main$lookup_task_var.invokeStatic (main.clj:68)
    leiningen.core.main$lookup_task_var.invoke (main.clj:64)
    leiningen.core.main$pass_through_help_QMARK_.invokeStatic (main.clj:78)
    leiningen.core.main$pass_through_help_QMARK_.invoke (main.clj:72)
    leiningen.core.main$task_args.invokeStatic (main.clj:81)
    leiningen.core.main$task_args.invoke (main.clj:80)
    leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:327)
    leiningen.core.main$resolve_and_apply.invoke (main.clj:324)
    leiningen.core.main$_main$fn__5998.invoke (main.clj:401)
    leiningen.core.main$_main.invokeStatic (main.clj:394)
    leiningen.core.main$_main.doInvoke (main.clj:391)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.lang.Var.invoke (Var.java:379)
    clojure.lang.AFn.applyToHelper (AFn.java:154)
    clojure.lang.Var.applyTo (Var.java:700)
    clojure.core$apply.invokeStatic (core.clj:646)
    clojure.main$main_opt.invokeStatic (main.clj:314)
    clojure.main$main_opt.invoke (main.clj:310)
    clojure.main$main.invokeStatic (main.clj:421)
    clojure.main$main.doInvoke (main.clj:384)
    clojure.lang.RestFn.invoke (RestFn.java:436)
    clojure.lang.Var.invoke (Var.java:388)
    clojure.lang.AFn.applyToHelper (AFn.java:160)
    clojure.lang.Var.applyTo (Var.java:700)
    clojure.main.main (main.java:37)
Caused by: java.lang.RuntimeException: No such var: ns-find/cljs
 at clojure.lang.Util.runtimeException (Util.java:221)
    clojure.lang.Compiler.resolveIn (Compiler.java:7138)
    clojure.lang.Compiler.resolve (Compiler.java:7108)
    clojure.lang.Compiler.analyzeSymbol (Compiler.java:7069)
    clojure.lang.Compiler.analyze (Compiler.java:6648)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler$CaseExpr$Parser.parse (Compiler.java:8756)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6001)
    clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6319)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.access$300 (Compiler.java:38)
    clojure.lang.Compiler$LetExpr$Parser.parse (Compiler.java:6269)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler$BodyExpr$Parser.parse (Compiler.java:6001)
    clojure.lang.Compiler$FnMethod.parse (Compiler.java:5380)
    clojure.lang.Compiler$FnExpr.parse (Compiler.java:3972)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6866)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6856)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.access$300 (Compiler.java:38)
    clojure.lang.Compiler$DefExpr$Parser.parse (Compiler.java:589)
    clojure.lang.Compiler.analyzeSeq (Compiler.java:6868)
    clojure.lang.Compiler.analyze (Compiler.java:6669)
    clojure.lang.Compiler.analyze (Compiler.java:6625)
    clojure.lang.Compiler.eval (Compiler.java:6931)
    clojure.lang.Compiler.load (Compiler.java:7379)
    clojure.lang.RT.loadResourceScript (RT.java:372)
    clojure.lang.RT.loadResourceScript (RT.java:363)
    clojure.lang.RT.load (RT.java:453)
    clojure.lang.RT.load (RT.java:419)
    clojure.core$load$fn__5677.invoke (core.clj:5893)
    clojure.core$load.invokeStatic (core.clj:5892)
    clojure.core$load.doInvoke (core.clj:5876)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.core$load_one.invokeStatic (core.clj:5697)
    clojure.core$load_one.invoke (core.clj:5692)
    clojure.core$load_lib$fn__5626.invoke (core.clj:5737)
    clojure.core$load_lib.invokeStatic (core.clj:5736)
    clojure.core$load_lib.doInvoke (core.clj:5717)
    clojure.lang.RestFn.applyTo (RestFn.java:142)
    clojure.core$apply.invokeStatic (core.clj:648)
    clojure.core$load_libs.invokeStatic (core.clj:5774)
    clojure.core$load_libs.doInvoke (core.clj:5758)
    clojure.lang.RestFn.applyTo (RestFn.java:137)
    clojure.core$apply.invokeStatic (core.clj:648)
    clojure.core$require.invokeStatic (core.clj:5796)
    clojure.core$require.doInvoke (core.clj:5796)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    leiningen.core.utils$require_resolve.invokeStatic (utils.clj:91)
    leiningen.core.utils$require_resolve.invoke (utils.clj:84)
    leiningen.core.utils$require_resolve.invokeStatic (utils.clj:94)
    leiningen.core.utils$require_resolve.invoke (utils.clj:84)
    leiningen.core.main$lookup_task_var.invokeStatic (main.clj:68)
    leiningen.core.main$lookup_task_var.invoke (main.clj:64)
    leiningen.core.main$pass_through_help_QMARK_.invokeStatic (main.clj:78)
    leiningen.core.main$pass_through_help_QMARK_.invoke (main.clj:72)
    leiningen.core.main$task_args.invokeStatic (main.clj:81)
    leiningen.core.main$task_args.invoke (main.clj:80)
    leiningen.core.main$resolve_and_apply.invokeStatic (main.clj:327)
    leiningen.core.main$resolve_and_apply.invoke (main.clj:324)
    leiningen.core.main$_main$fn__5998.invoke (main.clj:401)
    leiningen.core.main$_main.invokeStatic (main.clj:394)
    leiningen.core.main$_main.doInvoke (main.clj:391)
    clojure.lang.RestFn.invoke (RestFn.java:408)
    clojure.lang.Var.invoke (Var.java:379)
    clojure.lang.AFn.applyToHelper (AFn.java:154)
    clojure.lang.Var.applyTo (Var.java:700)
    clojure.core$apply.invokeStatic (core.clj:646)
    clojure.main$main_opt.invokeStatic (main.clj:314)
    clojure.main$main_opt.invoke (main.clj:310)
    clojure.main$main.invokeStatic (main.clj:421)
    clojure.main$main.doInvoke (main.clj:384)
    clojure.lang.RestFn.invoke (RestFn.java:436)
    clojure.lang.Var.invoke (Var.java:388)
    clojure.lang.AFn.applyToHelper (AFn.java:160)
    clojure.lang.Var.applyTo (Var.java:700)
    clojure.main.main (main.java:37)

eggsyntax avatar Oct 29 '17 16:10 eggsyntax

I worked around this, but do not currently have time to submit a patch. I'd like to document the problem though:

In lein-ns-dep-graph's project.clj, it lists [org.clojure/tools.namespace "0.3.0-alpha3"]. This specific version of clojure/tools adds the ns-find/clj & ns-find/cljs FNs; the same ones that're missing in the above error.

If you're seeing this error, it likely means that an earlier version of org.clojure/tools is being put into your project, perhaps because of a dependency in either your user.clj or project.clj

If you'll add the [org.clojure/tools.namespace "0.3.0-alpha4"] (note that it's on alpha4 now instead of 3) to your user.clj OR the project.clj, you will probably see this error go away.

If the error persists, try checking for org.clojure/tools conflicts on your classpath and fixing them. I haven't tried it, but https://github.com/webnf/lein-collisions may work for this.

Quezion avatar Jul 05 '18 20:07 Quezion

Added [org.clojure/tools.namespace "0.3.0-alpha4"] to my ~/.lein/profiles.clj, and it works fine for me too. Thanks, @Quezion , nice work!

eggsyntax avatar Jul 05 '18 21:07 eggsyntax

No amount of tinkering with a luminus template was able to make it work. lein deps :tree shows several overlapping that I removed with :excludes to no avail.

eskemojoe007 avatar Feb 14 '20 19:02 eskemojoe007

@eskemojoe007 Unfortunately I ran into the same behavior on a repo today & some fiddling with the tools.namespace dependency wasn't able to fix it. There's a promising option for deps.edn projects at https://github.com/clojure/tools.deps.graph , but I don't see any viable alternatives left for lein.

There might be a path to generating graphs for leiningen repos with https://github.com/RickMoynihan/lein-tools-deps , but adopting partial deps.edn probably isn't an ideal solution. If anyone tries this, please report back.

Quezion avatar Nov 04 '21 18:11 Quezion