greglook / cljstyle

A tool for formatting Clojure code
Eclipse Public License 1.0
293 stars 39 forks source link

Exception when using `##Inf` or `##-Inf` as a default value in maps #43

Closed drewinglis closed 3 years ago

drewinglis commented 4 years ago

A rewrite-clj bug: https://github.com/xsc/rewrite-clj/issues/75

$ cat foo.clj
(:min m ##Inf)
$ cljstyle check -v foo.clj
Using cljstyle configuration from 1 sources for foo.clj:
<path redacted>/.cljstyle
Error while processing file foo.clj
java.lang.Exception: :reader-macro node expects 2 values. [at line 1, column 15]
 at rewrite_clj.reader$throw_reader.invokeStatic (reader.clj:18)
    rewrite_clj.reader$throw_reader.doInvoke (reader.clj:11)
    clojure.lang.RestFn.invoke (RestFn.java:490)
    rewrite_clj.reader$read_n.invokeStatic (reader.clj:157)
    rewrite_clj.reader$read_n.invoke (reader.clj:145)
    rewrite_clj.parser.core$parse_printables.invokeStatic (core.clj:50)
    rewrite_clj.parser.core$parse_printables.doInvoke (core.clj:46)
    clojure.lang.RestFn.invoke (RestFn.java:445)
    rewrite_clj.parser.core$fn__2072.invokeStatic (core.clj:142)
    rewrite_clj.parser.core/fn (core.clj:111)
    clojure.lang.MultiFn.invoke (MultiFn.java:229)
    rewrite_clj.reader$read_with_meta.invokeStatic (reader.clj:132)
    rewrite_clj.reader$read_with_meta.invoke (reader.clj:128)
    rewrite_clj.parser.core$parse_next.invokeStatic (core.clj:35)
    rewrite_clj.parser.core$parse_next.invoke (core.clj:33)
    rewrite_clj.reader$read_n.invokeStatic (reader.clj:153)
    rewrite_clj.reader$read_n.invoke (reader.clj:145)
    rewrite_clj.parser.core$parse_printables.invokeStatic (core.clj:50)
    rewrite_clj.parser.core$parse_printables.doInvoke (core.clj:46)
    clojure.lang.RestFn.invoke (RestFn.java:445)
    rewrite_clj.parser.core$fn__2072.invokeStatic (core.clj:142)
    rewrite_clj.parser.core/fn (core.clj:111)
    clojure.lang.MultiFn.invoke (MultiFn.java:229)
    rewrite_clj.reader$read_with_meta.invokeStatic (reader.clj:132)
    rewrite_clj.reader$read_with_meta.invoke (reader.clj:128)
    rewrite_clj.parser.core$parse_next.invokeStatic (core.clj:35)
    rewrite_clj.parser.core$parse_next.invoke (core.clj:33)
    rewrite_clj.parser.core$parse_delim$fn__2046.invoke (core.clj:43)
    rewrite_clj.reader$read_repeatedly$fn__1450.invoke (reader.clj:141)
    clojure.core$repeatedly$fn__6176.invoke (core.clj:5089)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.RT.seq (RT.java:528)
    clojure.core$seq__5124.invokeStatic (core.clj:137)
    clojure.core$take_while$fn__5638.invoke (core.clj:2896)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.Cons.next (Cons.java:39)
    clojure.lang.RT.next (RT.java:706)
    clojure.core$next__5108.invokeStatic (core.clj:64)
    clojure.core$dorun.invokeStatic (core.clj:3134)
    clojure.core$doall.invokeStatic (core.clj:3140)
    clojure.core$doall.invoke (core.clj:3140)
    rewrite_clj.reader$read_repeatedly.invokeStatic (reader.clj:143)
    rewrite_clj.reader$read_repeatedly.invoke (reader.clj:137)
    rewrite_clj.parser.core$parse_delim.invokeStatic (core.clj:44)
    rewrite_clj.parser.core$parse_delim.invoke (core.clj:39)
    rewrite_clj.parser.core$fn__2086.invokeStatic (core.clj:172)
    rewrite_clj.parser.core/fn (core.clj:170)
    clojure.lang.MultiFn.invoke (MultiFn.java:229)
    rewrite_clj.reader$read_with_meta.invokeStatic (reader.clj:132)
    rewrite_clj.reader$read_with_meta.invoke (reader.clj:128)
    rewrite_clj.parser.core$parse_next.invokeStatic (core.clj:35)
    rewrite_clj.parser.core$parse_next.invoke (core.clj:33)
    rewrite_clj.parser$parse.invokeStatic (parser.clj:13)
    rewrite_clj.parser$parse.invoke (parser.clj:10)
    rewrite_clj.parser$parse_all$fn__2095.invoke (parser.clj:18)
    clojure.core$repeatedly$fn__6176.invoke (core.clj:5089)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.RT.seq (RT.java:528)
    clojure.core$seq__5124.invokeStatic (core.clj:137)
    clojure.core$take_while$fn__5638.invoke (core.clj:2896)
    clojure.lang.LazySeq.sval (LazySeq.java:40)
    clojure.lang.LazySeq.seq (LazySeq.java:49)
    clojure.lang.RT.seq (RT.java:528)
    clojure.core$seq__5124.invokeStatic (core.clj:137)
    clojure.core$dorun.invokeStatic (core.clj:3125)
    clojure.core$doall.invokeStatic (core.clj:3140)
    clojure.core$doall.invoke (core.clj:3140)
    rewrite_clj.parser$parse_all.invokeStatic (parser.clj:20)
    rewrite_clj.parser$parse_all.invoke (parser.clj:15)
    rewrite_clj.parser$parse_string_all.invokeStatic (parser.clj:35)
    rewrite_clj.parser$parse_string_all.invoke (parser.clj:32)
    cljstyle.format.core$reformat_string.invokeStatic (core.clj:57)
    cljstyle.format.core$reformat_string.invoke (core.clj:51)
    cljstyle.format.core$reformat_file.invokeStatic (core.clj:68)
    cljstyle.format.core$reformat_file.invoke (core.clj:62)
    cljstyle.task.core$check_source.invokeStatic (core.clj:239)
    cljstyle.task.core$check_source.invoke (core.clj:235)
    cljstyle.task.process$processing_action$compute_BANG___3013.invoke (process.clj:105)
    clojure.lang.AFn.applyToHelper (AFn.java:152)
    clojure.lang.AFn.applyTo (AFn.java:144)
    clojure.core$apply.invokeStatic (core.clj:657)
    clojure.core$with_bindings_STAR_.invokeStatic (core.clj:1965)
    clojure.core$with_bindings_STAR_.doInvoke (core.clj:1965)
    clojure.lang.RestFn.invoke (RestFn.java:425)
    clojure.lang.AFn.applyToHelper (AFn.java:156)
    clojure.lang.RestFn.applyTo (RestFn.java:132)
    clojure.core$apply.invokeStatic (core.clj:661)
    clojure.core$bound_fn_STAR_$fn__5471.doInvoke (core.clj:1995)
    clojure.lang.RestFn.invoke (RestFn.java:397)
    cljstyle.task.process$processing_action$fn__3017.invoke (process.clj:133)
    cljstyle.task.process.proxy$java.util.concurrent.RecursiveAction$ff19274a.compute (:-1)
    java.util.concurrent.RecursiveAction.exec (RecursiveAction.java:189)
    java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:289)
    java.util.concurrent.ForkJoinPool$WorkQueue.runTask (ForkJoinPool.java:1056)
    java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.java:1692)
    java.util.concurrent.ForkJoinWorkerThread.run (ForkJoinWorkerThread.java:157)
    com.oracle.svm.core.thread.JavaThreads.threadStartRoutine (JavaThreads.java:479)
{:files {:process-error 1}, :total 1, :elapsed 7.742605}
Checked 1 files in 7.74 ms
     1 process-error
Failed to process 1 files
Bardia95 commented 4 years ago

Got the same with cljstyle fix on a file with ##Inf as a value for a record, any idea how to fix it?

greglook commented 4 years ago

Unfortunately this is an issue in the underlying rewrite-clj library. There's been enough of these that it may be time to fork it and apply some targeted patches.