【问题标题】:Generate clojure spec for functions based on calls根据调用为函数生成 clojure 规范
【发布时间】:2018-01-08 22:04:24
【问题描述】:

是否可以根据调用函数的规范生成/推断 clojure 规范:

假设我有一个函数 foo 我已经为它编写了一个规范,在 foo 内部我调用其他函数 bar() 接受 foo 的一些输入(已经有规范),所以我的问题是有可能推断/生成酒吧的规格?任何现有的图书馆?

谢谢

【问题讨论】:

    标签: clojure clojure.spec


    【解决方案1】:

    https://github.com/stathissideris/spec-provider,您可以使用它来推断条形输出的规格。

    我使用它来将推断的规范可视化(在管道中)为形状(在 java 小程序中,借助 quil),以及与前一步(在 emacs 缓冲区中)相比,每个步骤输出之间的差异(在 emacs 缓冲区中) https://vimeo.com/240254456.

    【讨论】:

    • 我查看了规范提供程序,我认为如果我对 foo 使用测试生成然后对函数使用规范提供程序,它可能会根据调用推断 bar 的输入。还要推断输出,你怎么看?我弄对了吗?
    • 感谢您让我发现spec-provider!我也看了视频。有机会发布步骤之间差异的代码吗?另一方面,我发现图形表示对我来说不太有用(就我能理解的而言)
    • @marco.m 现在工作量很大,希望为github.com/pfeodrippe/clj-spec-view做类似的事情,你可以直接在浏览器上看到你的数据
    【解决方案2】:

    好吧,看起来 Clojure typed 有我正在寻找的东西,因为我有 foo 的规范,我可以生成测试,然后推断其他函数的规范和类型化注释。由于 clojure 是动态语言,因此它的实用性已经指定了入口点函数,我们可以从中推断出子函数规范并检查代码库中的一致性(在代码中使用正确的 args 调用的函数)

    https://github.com/typedclojure/core.typed

    希望这可以帮助其他人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2016-11-25
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多