borkdude / grasp

Grep Clojure code using clojure.spec regexes
Eclipse Public License 1.0
242 stars 7 forks source link

silently skip invalid *.jar files that aren't valid zip files #18

Closed philomates closed 3 years ago

philomates commented 3 years ago

Hello there, firstly, thanks for the tool, I'm still diving in, but I think it will be very useful for navigating large Clojure code bases!

I ran grasp on a some projects and was encountering some strange zip file errors (pasted below)

It turns out that they were for jar files created by clj-kondo in the dir .clj-kondo/.cache/2021.03.31/skip, like a-project/.clj-kondo/.cache/2021.03.31/skip/a_lib_2.11-20.8.1.jar. When I opened those files they were text files, not zip files.

The simplest way to fix this that I could think of was to skip jar files that grasp is unable to open.

Question: should this be skipped silently or somehow reported?

The error message:

{:clojure.main/message
 "Execution error (ZipException) at java.util.zip.ZipFile/open (ZipFile.java:-2).\nerror in opening zip file\n",
 :clojure.main/triage
 {:clojure.error/class java.util.zip.ZipException,
  :clojure.error/line -2,
  :clojure.error/cause "error in opening zip file",
  :clojure.error/symbol java.util.zip.ZipFile/open,
  :clojure.error/source "ZipFile.java",
  :clojure.error/phase :execution},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.ExceptionInfo,
    :message "error in opening zip file",
    :data
    {:type :sci/error,
     :line 10,
     :column 1,
     :message "error in opening zip file",
     :sci.impl/callstack #<Delay@1d12eff1: :not-delivered>,
     :file nil,
     :locals {}},
    :at
    [sci.impl.utils$rethrow_with_location_of_node
     invokeStatic
     "utils.cljc"
     111]}
   {:type java.util.zip.ZipException,
    :message "error in opening zip file",
    :at [java.util.zip.ZipFile open "ZipFile.java" -2]}],
  :trace
  [[java.util.zip.ZipFile open "ZipFile.java" -2]
   [java.util.zip.ZipFile <init> "ZipFile.java" 225]
   [java.util.zip.ZipFile <init> "ZipFile.java" 155]
   [java.util.jar.JarFile <init> "JarFile.java" 166]
   [java.util.jar.JarFile <init> "JarFile.java" 130]
   [grasp.impl$sources_from_jar invokeStatic "impl.clj" 211]
   [grasp.impl$grasp invokeStatic "impl.clj" 238]
   [grasp.impl$grasp invoke "impl.clj" 231]
   [grasp.impl$grasp$fn__8961 invoke "impl.clj" 239]
   [clojure.core$map$fn__5885 invoke "core.clj" 2757]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.Cons next "Cons.java" 39]
   [clojure.lang.RT next "RT.java" 713]
   [clojure.core$next__5404 invokeStatic "core.clj" 64]
   [clojure.core$concat$cat__5513$fn__5514 invoke "core.clj" 742]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 58]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5885 invoke "core.clj" 2748]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5885 invoke "core.clj" 2748]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.ChunkedCons chunkedNext "ChunkedCons.java" 59]
   [clojure.core$chunk_next invokeStatic "core.clj" 708]
   [clojure.core$reduce1 invokeStatic "core.clj" 942]
   [clojure.core$max invokeStatic "core.clj" 1123]
   [clojure.core$max doInvoke "core.clj" 1115]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.pprint$print_table$fn__11331 invoke "print_table.clj" 20]
   [clojure.core$map$fn__5885 invoke "core.clj" 2757]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5885 invoke "core.clj" 2748]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$map$fn__5889 invoke "core.clj" 2759]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.pprint$print_table$fmt_row__11339$iter__11340__11344$fn__11345
    invoke
    "print_table.clj"
    27]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$interleave$fn__6249 invoke "core.clj" 4318]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$drop$step__5944 invoke "core.clj" 2929]
   [clojure.core$drop$fn__5947 invoke "core.clj" 2934]
   [clojure.lang.LazySeq sval "LazySeq.java" 42]
   [clojure.lang.LazySeq seq "LazySeq.java" 51]
   [clojure.lang.RT seq "RT.java" 535]
   [clojure.core$seq__5420 invokeStatic "core.clj" 137]
   [clojure.core$apply invokeStatic "core.clj" 660]
   [clojure.pprint$print_table$fmt_row__11339
    invoke
    "print_table.clj"
    27]
   [clojure.pprint$print_table invokeStatic "print_table.clj" 31]
   [grasp.impl.pprint$print_table invokeStatic "pprint.clj" 55]
   [grasp.impl.pprint$print_table invoke "pprint.clj" 55]
   [grasp.impl.pprint$print_table invokeStatic "pprint.clj" 59]
   [grasp.impl.pprint$print_table invoke "pprint.clj" 55]
   [sci.impl.vars.SciVar invoke "vars.cljc" 315]
   [sci.impl.evaluator$fn_call invokeStatic "evaluator.cljc" 514]
   [sci.impl.evaluator$eval_call invokeStatic "evaluator.cljc" 562]
   [sci.impl.evaluator$eval invokeStatic "evaluator.cljc" 606]
   [sci.impl.interpreter$eval_form invokeStatic "interpreter.cljc" 77]
   [sci.impl.interpreter$eval_string_STAR_
    invokeStatic
    "interpreter.cljc"
    113]
   [sci.impl.interpreter$eval_string
    invokeStatic
    "interpreter.cljc"
    126]
   [sci.core$eval_string invokeStatic "core.cljc" 161]
   [grasp.native$eval_spec invokeStatic "native.clj" 87]
   [grasp.native$_main invokeStatic "native.clj" 120]
   [grasp.native$_main doInvoke "native.clj" 102]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.core$apply invokeStatic "core.clj" 665]
   [clojure.main$main_opt invokeStatic "main.clj" 514]
   [clojure.main$main_opt invoke "main.clj" 510]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :cause "error in opening zip file"}}
borkdude commented 3 years ago

Thanks!