fantomas-tool 4.7.9

建议的替代方案

fantomas

此包有可用的较新预发布版本。
有关详细信息,请查看下面的版本列表。
dotnet tool install --global fantomas-tool --version 4.7.9                
此包包含您可以从Shell/命令行调用的 .NET 工具
dotnet new tool-manifest # if you are setting up this repo
dotnet tool install --local fantomas-tool --version 4.7.9                
此包包含您可以从Shell/命令行调用的 .NET 工具
#tool dotnet:?package=fantomas-tool&version=4.7.9                
nuke :add-package fantomas-tool --version 4.7.9                

Fantomas

Fantomas logo

F# 源代码格式化工具,灵感来源于 Scala 的 Scalariform、OCaml 的 ocp-indent 和 Python 的 PythonTidy

Build Status Github Actions Discord

快速安装

如何使用

命令行工具 / API

使用此命令将 Fantomas 安装为 .NET 5 SDK 全局工具

dotnet tool install -g fantomas-tool

有关详细指南,请阅读 Fantomas:如何使用

FAKE 构建系统

Fantomas 可以轻松集成到 FAKE 构建系统。查看示例。

JetBrains Rider

Resharper for F# 在底层使用 Fantomas 格式化源代码。无需任何附加插件。

在 Rider 中使用最新版本

由于技术原因,Rider 无法始终使用 NuGet 上找到的最新版本的 Fantomas。作为解决方案,您可以本地安装 fantomas-tool 并使用 dotnet tool install fantomas-tool 配置它为一个 外部工具

Rider external tool window

Rider action window

这将对您的 Rider 编辑体验产生影响,外部命令行应用程序对文件的更改可能会触发比必要的更多 Rider 内部逻辑。这在默认格式化体验中可能会很明显。

Visual Studio Code

建议通过使用 Ionide 插件 来使用 Fantomas。Fantomas 集成在 FSAutoComplete 中,这是 Ionide 使用的语言服务器。

或者,您可以安装 fantomas-fmt 扩展。

Visual Studio

F# 格式化扩展将 Fantomas 设置为 F# 文件的默认格式化程序,可在 Visual Studio 的选项中进行配置。

Visual Studio for Mac

使用 dotnet tool install fantomas-tool 在本地安装 fantomas-tool 并将其配置为 [外部工具]

VS Mac external tool window

在线

尝试在线使用 Fantomas 在线工具

早期构建

偶尔会发布给 https://nuget.net.cn/ 的 alpha 或 beta 版本。我们之前的 MyGet 源已弃用。

基准测试

一些数据可以在 https://fsprojects.github.io/fantomas/ 找到 <br/> 我们使用 BenchmarkDotNet 收集 master 分支上每个构建的数据。

目的

该项目旨在根据给定配置格式化 F# 源文件。Fantomas 将确保源文件中元素的正确缩进和一致的间距。我们假设在将其提供给工具之前,源文件是 F# 编译器可以解析的。Fantomas 遵循两个 F# 风格指南:默认情况下遵循微软的 F# 代码格式化指南 和通过各种 设置G-Research F# 代码格式化指南

用例

该项目考虑了以下用例进行开发

  • 重新格式化一个不熟悉的代码库。当您不是原始编写者时,它会提供可读性。例如,以下示例

     type Type
         = TyLam of Type * Type
         | TyVar of string
         | TyCon of string * Type list
         with override this.ToString () =
                 match this with
                 | TyLam (t1, t2) -> sprintf "(%s -> %s)" (t1.ToString()) (t2.ToString())
                 | TyVar a -> a
                 | TyCon (s, ts) -> s
    

    将被重写为

     type Type =
         | TyLam of Type * Type
         | TyVar of string
         | TyCon of string * Type list
         override this.ToString() =
             match this with
             | TyLam(t1, t2) -> sprintf "(%s -> %s)" (t1.ToString()) (t2.ToString())
             | TyVar a -> a
             | TyCon(s, ts) -> s
    
  • 将冗长语法转换为轻量语法。提供在冗长模式下的源文件,Fantomas 将将其适当格式化为轻量模式。这可能有助于代码生成,因为生成冗长源文件更容易。例如,以下代码片段

     let Multiple9x9 () =
         for i in 1 .. 9 do
             printf "\n";
             for j in 1 .. 9 do
                 let k = i * j in
                 printf "%d x %d = %2d " i j k;
             done;
         done;;
     Multiple9x9 ();;
    

    被重新格式化为

     let Multiple9x9() =
         for i in 1..9 do
             printf "\n"
             for j in 1..9 do
                 let k = i * j
                 printf "%d x %d = %2d " i j k
    
     Multiple9x9()
    
  • 格式化 F# 签名,特别是由 F# 编译器和 F# Interactive 生成的签名。

对于更复杂的示例,请查看 F# 的输出示例,例如 20 个语言大战程序10 个 CodeReview.SE 源文件

为什么叫“Fantomas”?

选择这样的名字有几个原因。首先,它以“F”开头,就像许多其他 F# 项目一样。其次,Fantomas 是我文学作品中最喜欢的角色。最后,Fantomas 与 “phantom” 的希腊词根相同;巧合的是,F# AST 和格式化规则在正确处理起来时非常 神秘

贡献指南

请参阅 贡献指南

鸣谢

我们衷心感谢以下人员所做的贡献。

许可

本库和工具可在Apache 2.0许可下使用。更多信息请参阅许可文件

产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp3.1 兼容。
兼容目标框架
包含目标框架(在包中)
更多关于目标框架.NET Standard的信息。

此包没有依赖项。

版本 下载 最后更新
5.0.0-alpha-002 1,674 4/4/2022 5.0.0-alpha-002 已弃用,因为它不再维护。
5.0.0-alpha-001 657 3/19/2022 5.0.0-alpha-001 已弃用,因为它不再维护。
4.7.9 86,962 5/2/2022 4.7.9 已弃用,因为它不再维护。
4.7.8 3,027 4/25/2022 4.7.8 已弃用,因为它不再维护。
4.7.7 7,485 4/20/2022 4.7.7 已弃用,因为它不再维护。
4.7.6 47,077 4/4/2022 4.7.6 已弃用,因为它不再维护。
4.7.5 8,198 3/27/2022 4.7.5 已弃用,因为它不再维护。
4.7.4 938 3/25/2022 4.7.4 已弃用,因为它不再维护。
4.7.3 9,878 3/12/2022 4.7.3 已弃用,因为它不再维护。
4.7.2 36,467 3/11/2022 4.7.2 已弃用,因为它不再维护。
4.7.1 16,548 3/8/2022 4.7.1 已弃用,因为它不再维护。
4.7.0 7,398 3/4/2022 4.7.0 已弃用,因为它不再维护。
4.6.6 648 3/4/2022 4.6.6 已弃用,因为它不再维护。
4.6.5 70,815 2/18/2022 4.6.5 已弃用,因为它不再维护。
4.6.4 5,040 2/11/2022 4.6.4 已弃用,因为它不再维护。
4.6.3 5,243 2/8/2022 版本 4.6.3 已过时,因为它不再得到维护。
4.6.2 2,227 2/6/2022 版本 4.6.2 已过时,因为它不再得到维护。
4.6.1 8,039 2/1/2022 版本 4.6.1 已过时,因为它不再得到维护。
4.6.0 51,106 1/14/2022 版本 4.6.0 已过时,因为它不再得到维护。
4.6.0-beta-001 663 1/8/2022 版本 4.6.0-beta-001 已过时,因为它不再得到维护。
4.6.0-alpha-011 1,630 12/29/2021 版本 4.6.0-alpha-011 已过时,因为它不再得到维护。
4.6.0-alpha-010 1,404 12/4/2021 版本 4.6.0-alpha-010 已过时,因为它不再得到维护。
4.6.0-alpha-009 3,438 11/24/2021 版本 4.6.0-alpha-009 已过时,因为它不再得到维护。
4.6.0-alpha-008 967 11/19/2021 版本 4.6.0-alpha-008 已过时,因为它不再得到维护。
4.6.0-alpha-007 1,152 11/7/2021 版本 4.6.0-alpha-007 已过时,因为它不再得到维护。
4.6.0-alpha-006 1,209 11/3/2021 版本 4.6.0-alpha-006 已过时,因为它不再得到维护。
4.6.0-alpha-005 661 10/27/2021 版本 4.6.0-alpha-005 已过时,因为它不再得到维护。
4.6.0-alpha-004 38,406 10/20/2021 版本 4.6.0-alpha-004 已过时,因为它不再得到维护。
4.6.0-alpha-003 600 10/5/2021 版本 4.6.0-alpha-003 已过时,因为它不再得到维护。
4.6.0-alpha-002 458 9/7/2021 4.6.0-alpha-002 已弃用,因为它不再维护。
4.6.0-alpha-001 345 8/11/2021 4.6.0-alpha-001 已弃用,因为它不再维护。
4.5.12 1,005 1/8/2022 4.5.12 已弃用,因为它不再维护。
4.5.11 2,280 12/29/2021 4.5.11 已弃用,因为它不再维护。
4.5.10 8,775 12/4/2021 4.5.10 已弃用,因为它不再维护。
4.5.9 7,868 11/24/2021 4.5.9 已弃用,因为它不再维护。
4.5.8 2,414 11/19/2021 4.5.8 已弃用,因为它不再维护。
4.5.7 1,511 11/7/2021 4.5.7 已弃用,因为它不再维护。
4.5.6 1,621 11/3/2021 4.5.6 已弃用,因为它不再维护。
4.5.5 1,168 10/27/2021 4.5.5 已弃用,因为它不再维护。
4.5.4 12,240 10/5/2021 4.5.4 已弃用,因为它不再维护。
4.5.3 8,512 9/7/2021 4.5.3 已弃用,因为它不再维护。
4.5.2 12,980 8/11/2021 4.5.2 已弃用,因为它不再维护。
4.5.1 5,328 7/24/2021 4.5.1 已弃用,因为它不再维护。
4.5.0 37,643 7/7/2021 4.5.0 已弃用,因为它不再维护。
4.5.0-beta-005 431 7/6/2021 4.5.0-beta-005 已弃用,因为它不再维护。
4.5.0-beta-004 355 7/5/2021 4.5.0-beta-004 已弃用,因为它不再维护。
4.5.0-beta-003 463 7/5/2021 4.5.0-beta-003 已弃用,因为它不再维护。
4.5.0-beta-002 893 6/27/2021 4.5.0-beta-002 已弃用,因为它不再维护。
4.5.0-beta-001 2,443 6/5/2021 4.5.0-beta-001 已弃用,因为它不再维护。
4.5.0-alpha-020 415 5/26/2021 4.5.0-alpha-020 已弃用,因为它不再维护。
4.5.0-alpha-019 817 5/22/2021 4.5.0-alpha-019 已弃用,因为它不再维护。
4.5.0-alpha-018 461 5/21/2021 4.5.0-alpha-018 已弃用,因为它不再维护。
4.5.0-alpha-017 708 5/15/2021 4.5.0-alpha-017 已弃用,因为它不再维护。
4.5.0-alpha-016 449 5/9/2021 4.5.0-alpha-016 已弃用,因为它不再维护。
4.5.0-alpha-015 614 5/8/2021 4.5.0-alpha-015 已弃用,因为它不再维护。
4.5.0-alpha-014 657 4/30/2021 4.5.0-alpha-014 已弃用,因为它不再维护。
4.5.0-alpha-013 540 4/27/2021 4.5.0-alpha-013 已弃用,因为它不再维护。
4.5.0-alpha-012 436 4/23/2021 4.5.0-alpha-012 已弃用,因为它不再维护。
4.5.0-alpha-011 688 4/20/2021 4.5.0-alpha-011 已弃用,因为它不再维护。
4.5.0-alpha-010 679 4/14/2021 4.5.0-alpha-010 已弃用,因为它不再维护。
4.5.0-alpha-009 415 4/11/2021 4.5.0-alpha-009 已弃用,因为它不再维护。
4.5.0-alpha-008 678 4/8/2021 4.5.0-alpha-008 已弃用,因为它不再维护。
4.5.0-alpha-007 498 4/8/2021 4.5.0-alpha-007 已弃用,因为它不再维护。
4.5.0-alpha-006 448 4/5/2021 4.5.0-alpha-006 已弃用,因为它不再维护。
4.5.0-alpha-005 908 4/3/2021 4.5.0-alpha-005 已弃用,因为它不再维护。
4.5.0-alpha-004 474 4/2/2021 4.5.0-alpha-004 已弃用,因为它不再维护。
4.5.0-alpha-003 732 3/28/2021 4.5.0-alpha-003 已弃用,因为它不再维护。
4.5.0-alpha-002 598 3/22/2021 4.5.0-alpha-002 已弃用,因为它不再维护。
4.5.0-alpha-001 4,946 2/26/2021 4.5.0-alpha-001 已弃用,因为它不再维护。
4.4.0 28,862 2/25/2021 4.4.0 已弃用,因为它不再维护。
4.4.0-beta-008 783 2/19/2021 4.4.0-beta-008 已废弃,因为它不再维护。
4.4.0-beta-007 382 2/12/2021 4.4.0-beta-007 已废弃,因为它不再维护。
4.4.0-beta-006 639 2/12/2021 4.4.0-beta-006 已废弃,因为它不再维护。
4.4.0-beta-005 469 2/9/2021 4.4.0-beta-005 已废弃,因为它不再维护。
4.4.0-beta-004 668 2/5/2021 4.4.0-beta-004 已废弃,因为它不再维护。
4.4.0-beta-003 735 1/30/2021 4.4.0-beta-003 已废弃,因为它不再维护。
4.4.0-beta-002 568 1/23/2021 4.4.0-beta-002 已废弃,因为它不再维护。
4.4.0-beta-001 484 1/22/2021 4.4.0-beta-001 已废弃,因为它不再维护。
4.4.0-alpha-008 539 1/15/2021 4.4.0-alpha-008 已废弃,因为它不再维护。
4.4.0-alpha-007 2,877 12/26/2020 4.4.0-alpha-007 已废弃,因为它不再维护。
4.4.0-alpha-006 514 12/25/2020 4.4.0-alpha-006 已废弃,因为它不再维护。
4.4.0-alpha-005 522 12/23/2020 4.4.0-alpha-005 已废弃,因为它不再维护。
4.4.0-alpha-004 475 12/22/2020 4.4.0-alpha-004 已废弃,因为它不再维护。
4.4.0-alpha-003 578 12/18/2020 4.4.0-alpha-003 已废弃,因为它不再维护。
4.4.0-alpha-002 462 12/17/2020 4.4.0-alpha-002 已弃用,因为它不再维护。
4.4.0-alpha-001 469 12/17/2020 4.4.0-alpha-001 已弃用,因为它不再维护。
4.3.0 6,327 12/17/2020 4.3.0 已弃用,因为它不再维护。
4.3.0-beta-002 518 12/11/2020 4.3.0-beta-002 已弃用,因为它不再维护。
4.3.0-beta-001 474 12/7/2020 4.3.0-beta-001 已弃用,因为它不再维护。
4.3.0-alpha-007 516 11/21/2020 4.3.0-alpha-007 已弃用,因为它不再维护。
4.3.0-alpha-006 496 11/20/2020 4.3.0-alpha-006 已弃用,因为它不再维护。
4.3.0-alpha-005 521 11/16/2020 4.3.0-alpha-005 已弃用,因为它不再维护。
4.3.0-alpha-004 487 11/12/2020 4.3.0-alpha-004 已弃用,因为它不再维护。
4.3.0-alpha-003 490 11/10/2020 4.3.0-alpha-003 已弃用,因为它不再维护。
4.3.0-alpha-002 537 10/26/2020 4.3.0-alpha-002 已弃用,因为它不再维护。
4.3.0-alpha-001 1,498 10/23/2020 4.3.0-alpha-001 已弃用,因为它不再维护。
4.2.0 6,467 9/25/2020 4.2.0 已弃用,因为它不再维护。
4.2.0-alpha-004 643 9/23/2020 4.2.0-alpha-004 已弃用,因为它不再维护。
4.2.0-alpha-003 521 9/21/2020 4.2.0-alpha-003 已弃用,因为它不再维护。
4.2.0-alpha-002 611 9/19/2020 4.2.0-alpha-002 已弃用,因为它不再维护。
4.2.0-alpha-001 584 9/18/2020 4.2.0-alpha-001 已弃用,因为它不再维护。
4.1.1 2,191 9/17/2020 4.1.1 已弃用,因为它不再维护。
4.1.0 1,256 9/10/2020 4.1.0 已弃用,因为它不再维护。
4.1.0-beta-004 720 9/5/2020 4.1.0-beta-004 已弃用,因为它不再维护。
4.1.0-beta-003 575 9/4/2020 4.1.0-beta-003 已弃用,因为它不再维护。
4.1.0-beta-002 580 9/4/2020 4.1.0-beta-002 已弃用,因为它不再维护。
4.1.0-beta-001 569 9/3/2020 4.1.0-beta-001 已弃用,因为它不再维护。
4.1.0-alpha-001 552 9/1/2020 4.1.0-alpha-001 已弃用,因为它不再维护。
4.0.0 3,160 8/27/2020 4.0.0 已弃用,因为它不再维护。
4.0.0-beta-003 594 8/21/2020 4.0.0-beta-003 已弃用,因为它不再维护。
4.0.0-beta-002 1,062 8/7/2020 4.0.0-beta-002 已弃用,因为它不再维护。
4.0.0-beta-001 805 7/20/2020 4.0.0-beta-001 已弃用,因为它不再维护。
4.0.0-alpha-014 541 7/14/2020 4.0.0-alpha-014 已弃用,因为它不再维护。
4.0.0-alpha-013 541 7/11/2020 4.0.0-alpha-013 已弃用,因为它已不再维护。
4.0.0-alpha-012 862 7/6/2020 4.0.0-alpha-012 已弃用,因为它已不再维护。
4.0.0-alpha-011 509 6/25/2020 4.0.0-alpha-011 已弃用,因为它已不再维护。
4.0.0-alpha-010 517 6/18/2020 4.0.0-alpha-010 已弃用,因为它已不再维护。
4.0.0-alpha-009 494 6/12/2020 4.0.0-alpha-009 已弃用,因为它已不再维护。
4.0.0-alpha-008 540 6/2/2020 4.0.0-alpha-008 已弃用,因为它已不再维护。
4.0.0-alpha-007 490 6/1/2020 4.0.0-alpha-007 已弃用,因为它已不再维护。
4.0.0-alpha-006 622 5/23/2020 4.0.0-alpha-006 已弃用,因为它已不再维护。
4.0.0-alpha-005 749 5/16/2020 4.0.0-alpha-005 已弃用,因为它已不再维护。
4.0.0-alpha-004 1,020 5/4/2020 4.0.0-alpha-004 已弃用,因为它已不再维护。
4.0.0-alpha-003 578 5/3/2020 4.0.0-alpha-003 已弃用,因为它已不再维护。
4.0.0-alpha-002 537 4/26/2020 4.0.0-alpha-002 已弃用,因为它已不再维护。
4.0.0-alpha-001 514 4/20/2020 4.0.0-alpha-001 已弃用,因为它已不再维护。
3.3.0 36,935 2/28/2020 3.3.0 已弃用,因为它已不再维护。
3.3.0-beta-002 1,041 2/21/2020 3.3.0-beta-002 已弃用,因为它不再维护。
3.3.0-beta-001 577 2/18/2020 3.3.0-beta-001 已弃用,因为它不再维护。
3.2.0 2,710 2/3/2020 3.2.0 已弃用,因为它不再维护。
3.2.0-beta-002 776 1/7/2020 3.2.0-beta-002 已弃用,因为它不再维护。
3.2.0-beta-001 599 12/26/2019 3.2.0-beta-001 已弃用,因为它不再维护。
3.1.0 12,217 11/27/2019 3.1.0 已弃用,因为它不再维护。
3.0.0 1,406 10/11/2019 3.0.0 已弃用,因为它不再维护。
3.0.0-beta-006 560 10/2/2019 3.0.0-beta-006 已弃用,因为它不再维护。
3.0.0-beta-005 568 9/27/2019 3.0.0-beta-005 已弃用,因为它不再维护。
3.0.0-beta-004 597 9/18/2019 3.0.0-beta-004 已弃用,因为它不再维护。
3.0.0-beta-003 622 9/13/2019 3.0.0-beta-003 已弃用,因为它不再维护。
3.0.0-beta-002 935 7/20/2019 3.0.0-beta-002 已弃用,因为它不再维护。
3.0.0-beta-001 733 7/12/2019 3.0.0-beta-001 已弃用,因为它不再维护。
2.9.2 6,350 2/2/2019 2.9.2 已弃用,因为它不再维护。
2.9.1 1,713 11/20/2018 2.9.1 已弃用,因为它不再维护。
2.9.0 1,295 10/17/2018 2.9.0 已弃用,因为它不再维护。
2.8.1 1,292 9/12/2018 2.8.1 已弃用,因为它不再维护。
2.8.0 1,475 7/7/2018 2.8.0 已弃用,因为它不再维护。

### 更改
* 将 `fable_modules` 添加到始终排除的目录中。[Fable 3.4](https://github.com/fable-compiler/Fable/releases/tag/3.4.0)

### 修复
* 将匹配 lambda 后的绑定移出嵌套模块。[#2214](https://github.com/fsprojects/fantomas/issues/2214)