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

欢迎!请查阅关于页面了解有关此功能的更多信息。

0
ClojureScript

如标题所说。

最小复现示例:https://github.com/eerohele/cljs-repl-blow-stack

我正在尝试制作一个最简单的ClojureScript REPL。我是不是做了什么错误,或者是ClojureScript的一个bug?

1 答案

+2

被选中
 
最佳答案

错误告诉你在浏览器中发生了异常。你检查浏览器中的堆栈跟踪了吗?

至于制作最简单的REPL – 快速入门有一个更好的方法 – 你的最小复现步骤太多,不再被推荐。我看不到Socket REPL在这里起到了什么作用,只是使堆栈跟踪更复杂。

你应该不再做的事情

  1. 通过脚本构建并直接调用REPL API
  2. 使用:browser目标,并手动尝试连接(这已经被为您完成了)

再次请查阅快速入门指南,以了解更简单、更标准的方式处理事物。

至少,这将提供一个真正的最小可复现示例,并省略所有不必要的步骤。

更新:我刚刚按照快速入门的步骤试了一下,在REPL中输入了与编译源代码相匹配的ns表单,但我无法复现。

所以这里可能存在一个bug,但你肯定需要进一步缩减。


编辑
感谢您的回答!

>错误信息告诉您异常是在浏览器中发生的。您是否查看过浏览器控制台以查看浏览器堆栈跟踪?

是的,我查看过——浏览器控制台中没有任何内容。

此外,我在发布这个问题之后又试了几次,有时候得到的是InternalError而不是RangeError。尽管如此,我对此并不确定。

>至于创建最简单的REPL——快速入门提供了一种更好的方式
> ...
>我看不到Socket REPL在这里有什么作用

抱歉,我应该在我最初的文章中表述得更精确。我尝试在socket中运行一个最小化的REPL,以便我从我的编辑器连接到它。我提供的复现例子没有做这件事,但在我真正的用例中,我还需要覆盖cljs.repl/repl的:print和:caught钩子,以便以我的编辑器插件预期接收的方式打印评估结果和异常。我还需要访问编译器环境,以便实现编辑器的自动完成等功能。

请纠正我,但如果这样的方法不提供这些功能,这可能并不是这个问题的重点。尽管如此,我可以为这个话题再发一个问题。毕竟,现在我并不确定如果无法或不应使用REPL API,我该如何实现ClojureScript编辑器集成。

无论怎样,了解这种方法不被推荐是好的。

>所以这里可能存在一个bug,但你肯定需要进一步缩减

明白了。这个问题肯定与clojure.browser.repl有关,但我需要进一步调查才能确信。
...