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

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

0
ClojureScript

以下应该抛出异常

cljs.user=> (set! *print-fn-bodies*) nil cljs.user=> (set! *print-fn-bodies* true) true cljs.user=> (set! target -prop 3) true cljs.user=> (set! *print-fn-bodies* true false true) true

实现指导

抛出的信息应从 Clojure 衍生,例如 "格式不正确的赋值,期望 (set! target val) 或 (set! target -prop val)"

可以在分析器代码中添加检查和抛出,该代码解析 'set!
https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L2229

类似的异常示例在 'if 的分析器代码中
https://github.com/clojure/clojurescript/blob/6eedd0a08c49f7b0d4dcb30977b2fb38c90577bd/src/main/clojure/cljs/analyzer.cljc#L1446-L1449

可以在 {{cljs.analyzer-tests}} 中添加测试(通过 {{lein test}} 运行):https://github.com/clojure/clojurescript/blob/master/src/test/clojure/cljs/analyzer_tests.clj

9 答案

0

评论者:namenu

set! 支持三种参数形式,所以 Clojure 中的错误信息可能存在语法错误。

直接抛出错误与 {{'if}} 一样好吗?

0

评论者:thheller

代码表明传递 3 个参数实际上是有效的。

(set! o -prop val) (set! (.-prop o) val)

0

评论者:mfikes

托马斯,明白了。我会更新描述。

0

评论者:mfikes

Hyunwoo:是的

0

评论者:sulami

希望这个能解决问题(我验证过它能在我的机器上构建并在所有项目上运行)。

0

评论者:mfikes

Hi Robin。谢谢您的贡献。您已经签署CA了吗?

0

评论者:sulami

是的,我刚刚签过。

0

评论者:mfikes

CLJS-2923.patch LGTM。它在CI和Canary测试中表现正常并成功通过。

0
...