gpt4 book ai didi

f# - 用于 F# 代码的类似 HLint 的工具?

转载 作者:行者123 更新时间:2023-12-04 06:19:33 28 4
gpt4 key购买 nike

HLint 是一个用于 Haskell 代码的命令行静态分析工具,它甚至可以建议代码的适当重构版本。有人知道用于检查 F# 代码的类似命令行工具吗?

最佳答案

简短回答:

不,还没有这样的工具。

长答案:

让我们讨论如何构建它。

我做了一些可能有用的背景研究。

引用

函数式语言中有一些 lint 工具,可以作为灵感来源。然而,他们往往会走向不同的方向。

HLint是一个先进的工具,它的重构能力是惊人的。重构建议在 F# 中更加棘手,因为 (1) F# 代码可能有副作用,因此等式推理不健全 (2) 在进行无点转换时,值限制可能会消除一些好的建议。如果我们接受误报,它可能会变得更容易一些。

在 Scala 的世界里,你有 Wart RemoverScala Style .前者侧重于 Scala 中常见的函数式编程错误。后者侧重于人为错误和不一致(例如命名、约定等)。我猜 Wart Remover 与 F# 更相关,因为它是一种功能优先的编程语言。但是,样式检查器工具在包含多个开发人员的大型代码库中很有用。

与 F# 最相关的 lint 工具可能是 OCaml 的样式检查器,Mascot .它有一个庞大且可扩展的规则集。这些规则中的许多规则都适用于 F#,只需稍作调整。

资源(以及缺乏)

我们有什么:

  • F# 编译器在 GitHub 上。相关组件 - F# compiler service有一个 NuGet 包,所以引导很容易。 F# 编译器源代码是一个很好的资源,因为 F# 编译器的警告非常好且内容丰富。
  • 最近有一些使用 F# 编译器的作品,例如语言绑定(bind)、重构、代码格式化等,所以我们有经验可以积累。
  • 我们还有其他 lint 工具可供学习。

  • 我们没有的:
  • 缺少有关 F# 中推荐样式和实践的良好文档。 The design guideline很有用,但还不够完整。
  • 构建 lint 工具既耗时又困难。即使使用像 Fantomas 这样的简单和单一用途的工具;以正确的方式处理 F# 的 AST 需要花费大量时间。

  • 总而言之,如果我们定义了一个正确的范围,那么为 F# 创建一个简单而有用的工具是触手可及的。

    更新

    https://github.com/duckmatt/FSharpLint 上提供了一个正在积极开发的 F# linter .看来我的分析并不太远:)。

    关于f# - 用于 F# 代码的类似 HLint 的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19720845/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com