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

欢迎!请查看关于页面以了解更多关于如何使用本站的信息。

0 投票
Spec
目前有些规格上的操作难以实现,因为没有统一的方法来查找由规格所组成的“子规格”。例子

* 依赖分析
* 深度描述(展示顶层规格使用的所有规格)
* 检测缺失或无效的规格名称

例如,给定


(s/def ::user-id int?)
(s/def ::user (s/keys :req [::userid])) ;; note misspelling
(s/valid? ::user {::userid "Jim"}) ;; => true but expect false


并且确定 ::user 的“子规格”的方法,一个代码检查工具可以检查 s/keys 中的所有键是否都已是定义的规格。

*解决方案:

1. {{form}} 可以用来获取原始的规格形式,但之后还需要进一步解释(并且失去了它被创建时的原始词法环境)。例如尝试:https://gist.github.com/ericnormand/6cfe6809beeeea3246679e904372cca0
2. Spec 形式规格 (CLJ-2112) 尚未提供,但可以用来获取规格的解析表示,这仍然需要进行一些处理,但至少会有已知的格式。

*建议:

添加一个机制来获取一个规格所组成的“子规格”。每个规格实现可以自行选择以适当方式实现此功能。

3 答案

0 投票

评论由:ericnormand

我忘记添加这个建议了

建议

我建议我们向 Spec 协议添加一个 children* 方法。它应该返回被直接引用的规格集合。集合中的规格应该是关键词(如果它是通过名称引用的),Spec 实例(对于嵌套规格),或一些其他可以作为规格的有效值(如 fn)。

0 投票

评论人:alexmiller

重写了标题和一些描述,使其更少依赖于实现细节(可能会更改),更多地关注目前的问题。

0 投票
参考:https://clojure.atlassian.net/browse/CLJ-2208(由ericnormand报告)
...