2024年Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面了解关于这个工作的更多信息。

0
tools.reader
重新分类

我在实际代码中使用了类似这样的形式触发了这个问题

(defn ^:1234567891011 foo []

);

使用此表单(在emacs中cider-load-buffer)发送文件时会抛出异常

StringIndexOutOfBoundsException: Range [44, 34) out of bounds for length 34
	jdk.internal.util.Preconditions$1.apply (Preconditions.java:55)
	jdk.internal.util.Preconditions$1.apply (Preconditions.java:52)
	jdk.internal.util.Preconditions$4.apply (Preconditions.java:213)
	jdk.internal.util.Preconditions$4.apply (Preconditions.java:210)
	jdk.internal.util.Preconditions.outOfBounds (Preconditions.java:98)
	jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex (Preconditions.java:112)
	jdk.internal.util.Preconditions.checkFromToIndex (Preconditions.java:349)
	java.lang.AbstractStringBuilder.substring (AbstractStringBuilder.java:1086)
	java.lang.StringBuilder.substring (StringBuilder.java:91)
	java.lang.AbstractStringBuilder.substring (AbstractStringBuilder.java:1038)
	java.lang.StringBuilder.substring (StringBuilder.java:91)
	clojure.tools.reader.reader-types/peek-source-log (reader_types.clj:248)
	clojure.tools.reader.reader-types/peek-source-log (reader_types.clj:243)
	clojure.tools.reader.reader-types/log-source*/fn--4391 (reader_types.clj:324)
	clojure.core/apply (core.clj:667)
	clojure.core/with-bindings* (core.clj:1990)
	clojure.core/with-bindings* (core.clj:1990)
	clojure.tools.reader.reader-types/log-source* (reader_types.clj:321)
	clojure.tools.reader.reader-types/log-source* (reader_types.clj:316)
	clojure.tools.reader/read+string (reader.clj:1029)
	clojure.tools.reader/read+string (reader.clj:1019)
	shadow.cljs.repl/read-one/fn--17402 (repl.clj:628)
	shadow.cljs.repl/read-one (repl.clj:601)
	shadow.cljs.repl/read-one (repl.clj:578)
	shadow.cljs.repl/process-input (repl.clj:703)
	shadow.cljs.repl/process-input (repl.clj:691)
	shadow.cljs.repl/repl-load-file* (repl.clj:195)
	shadow.cljs.repl/repl-load-file* (repl.clj:173)
	shadow.cljs.repl/repl-load-file (repl.clj:231)
	shadow.cljs.repl/repl-load-file (repl.clj:229)
	shadow.cljs.repl/process-read-result (repl.clj:570)
	shadow.cljs.repl/process-read-result (repl.clj:550)
	shadow.cljs.repl/process-input (repl.clj:713)
	shadow.cljs.repl/process-input (repl.clj:691)
	shadow.cljs.devtools.server.worker.impl/eval17950/fn--17953 (impl.clj:698)
	clojure.lang.MultiFn.invoke (MultiFn.java:234)
	shadow.cljs.devtools.server.util/server-thread/fn--17590/fn--17591/fn--17599 (util.clj:283)
	shadow.cljs.devtools.server.util/server-thread/fn--17590/fn--17591 (util.clj:282)
	shadow.cljs.devtools.server.util/server-thread/fn--17590 (util.clj:255)
	java.lang.Thread.run (Thread.java:1583)

我在此旧的Slack线程中找到了这个,其中@thheller将其缩小到tools.reader,并提供了此重现

(let [rdr (clojure.tools.reader.reader-types/source-logging-push-back-reader
            "(ns demo.test)\n\n(def foo \"foo\");\n(def bar [])\n")]
  (clojure.tools.reader/read+string rdr)
  (clojure.tools.reader/read+string rdr)
  (clojure.tools.reader/read+string rdr))

2个回答

0

选中
 
最佳回答

这个问题应该在shadow-cljs 2.26.0中被修复,或者更确切地说,修复了这个问题并现在是声明依赖的工具.reader 1.3.7。

0
by

这些问题看起来可能是不同的。我很乐意提交后者,但我不清楚这是否能解决你的原始问题?

by
上方的报告错误地涉及了 shadow-cljs/CLJS REPL,它只是由于使用了 read+string 函数而出现在那里。正如在可重复的片段中所示,可以在不使用 shadow-cljs 的情况下完全重现该问题。我相信,通过 tools.reader 的修复,shadow-cljs REPL 问题将得到解决,但我还没有自己检查 underlying tools.reader 问题。
...