fsautocomplete 0.73.2

dotnet tool install --global fsautocomplete --version 0.73.2                
此包包含一个可以从 shell/命令行调用的 .NET 工具
dotnet new tool-manifest # if you are setting up this repo
dotnet tool install --local fsautocomplete --version 0.73.2                
此包包含一个可以从 shell/命令行调用的 .NET 工具
#tool dotnet:?package=fsautocomplete&version=0.73.2                
nuke :add-package fsautocomplete --version 0.73.2                

FsAutoComplete

NuGet version (FsAutoComplete)

FsAutoComplete 项目 (FSAC) 为编辑器提供了丰富的编辑或智能感知功能的后端服务。

可以使用语言服务器协议进行托管。

目前正被以下所使用

它基于

构建和测试

要求

  • .NET SDK,请见 global.json 获取确切版本。最低要求:>= 6.0,推荐:>= 7.0
  1. 恢复 dotnet 工具以安装本地 Paket dotnet tool restore
  2. 使用 dotnet build 构建 FSAC
  • 要在 ~/bin 目录中构建 release fsautocomplete 二进制文件,请使用 LocalRelease 目标
  • 要构建、运行所有测试并创建包,请使用 All 目标

DevContainer

该存储库还提供了可以与 VSCode 的 Remote Containers 扩展一起使用的 DevContainer 定义 - 使用它来获得稳定的开发环境

Gitpod.io

此存储库已准备好使用 Gitpod 进行基于 Web 的 VSCode 风格的 IDE。点击下面的按钮开始!

Gitpod Ready-to-Code

创建一个新代码修复

检出 本指南 以开始新的代码修复。

发布

  • 将 CHANGELOG.md 中的发布说明更新为 Unreleased 部分的当前版本。使用 keepachangelog.com 中的 AddedFixed 等部分标题。
  • 对于 Changelog 中的各个部分,使用例如 BUGFIXFEATUREENHANCEMENT 的标题,并附带链接到带有 PR 标题的 PR。
  • 通过Promote目标运行Promote FAKE目标,从当前Unreleased部分创建适当的发布版本,并加盖日期戳,以及为这次推广创建提交和标签
  • 将此提交和标签推送到主分支
  • CI管道将根据标签发布发布版。

OpenTelemetry

FsAutocomplete正在使用System.Diagnostics.Activity来创建跟踪。

要导出跟踪,运行Jaeger

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=9411 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

然后配置你的环境

OTEL_EXPORTER_OTLP_ENDPOINT = "https://127.0.0.1:4317"

启动 FsAutocomplete(通过code .dotnet fsautocomplete

执行一些操作,例如打开文档、保存、获取工具提示等。

然后在https://127.0.0.1:16686/中打开以检查跟踪。

通信协议

FsAutoComplete支持LSP作为通信协议。

支持的LSP端点

  • initialize
  • textDocument/didOpen
  • textDocument/didChange
  • textDocument/didSave
  • textDocument/hover
  • textDocument/completion & completionItem/resolve
  • textDocument/rename
  • textDocument/definition
  • textDocument/typeDefinition
  • textDocument/implementation
  • textDocument/codeAction:
    • 移除未使用的open
    • 解析命名空间/模块
    • _替换未使用的符号
    • 根据错误消息修复拼写错误
    • 删除多余的限定符
    • IDisposable添加缺失的new关键字
    • 在模式匹配中生成所有DU案例的案例
    • 生成空接口实现
    • FSharpLint提出的修复建议
  • textDocument/codeLens & codeLens/resolve
    • 代码镜头签名
    • 引用号码代码镜头
  • textDocument/formatting - 通过 fantomas 驱动
  • textDocument/references
  • textDocument/documentHighlight
  • textDocument/signatureHelp
  • textDocument/documentSymbol
  • textDocument/inlayHint
  • textDocument/inlineValue
  • workspace/didChangeWatchedFiles
  • workspace/didChangeConfiguration
  • workspace/symbol

自定义端点

自定义端点使用(消息体)PlainNotification类型和与旧JSON协议完全相同的序列化格式进行字符串格式序列化。

  • fsharp/signature - 接受TextDocumentPositionParams,以格式化字符串返回给定位置符号的签名
  • fsharp/signatureData - 接受TextDocumentPositionParams,以DTO返回给定位置符号的签名
  • fsharp/lineLens - 接受ProjectParmsProject字段包含F#文件路径),返回应显示代码镜头的位置
  • fsharp/compilerLocation - 无输入,返回FCS、FSI和MsBuild的路径
  • fsharp/compile - 接受ProjectParms,尝试编译项目,返回错误列表和退出状态码
  • fsharp/workspacePeek - 接受WorkspacePeekRequest,返回可能的工作空间列表(解决解决方案文件,如果没有解决方案文件,则返回项目列表)
  • fsharp/workspaceLoad - 接受WorkspaceLoadParms,在后台加载给定项目列表,通过fsharp/notifyWorkspace通知提供部分结果
  • fsharp/project - 接受ProjectParms,加载给定项目
  • fsharp/fsdn - 接受ProjectParmsProject字段包含查询字符串),查询FSDN并返回函数列表
  • fsharp/f1Help - 接受TextDocumentPositionParams,返回给定位置符号的MSDN文档的URL
  • fsharp/documentation - 接受TextDocumentPositionParams,返回给定位置符号的文档数据,用于InfoPanel
  • fsharp/documentationSymbol - 接受DocumentationForSymbolReuqest,从给定程序集返回给定符号的文档数据,用于InfoPanel
  • fsproj/moveFileUp - 接受DotnetFileRequest,将文件向下移动一行
  • fsproj/moveFileDown - 接受 DotnetFileRequest,在项目文件中向上移动文件1行
  • fsproj/addFileAbove - 接受 DotnetFile2Request,如果需要,创建文件并将其添加到项目文件的参考文件上方,如果尚未存在
  • fsproj/addFileBelow - 接受 DotnetFile2Request,如果需要,创建文件并将其添加到项目文件的参考文件下方,如果尚未存在
  • fsproj/addFile - 接受 DotnetFileRequest,如果需要,创建文件并将其添加到项目文件中,如果尚未存在
  • fsproj/addExistingFile - 接受 DotnetFileRequest,如果需要,将现有文件添加到项目中,如果尚未存在
  • fsproj/removeFile - 接受 DotnetFileRequest,从项目中删除文件
  • fsproj/renameFile - 接受 DotnetRenameFileRequest,从项目中重命名文件

支持的语言服务器(LSP)通知

  • 窗口/显示消息
  • 窗口/记录消息
  • textDocument/publishDiagnostics

自定义通知

  • fsharp/notifyWorkspace - 通知工作区/解决方案/项目加载事件
  • fsharp/notifyWorkspacePeek - 通知工作区预览

其他启动选项

  • --state-directory dir - 保持语言服务器状态的特定工作区目录
  • --verbose - 设置此标志启用了额外的日志输出到 stderr
  • DOTNET_ROOT - 设置此环境变量,将设置 dotnet SDK 根目录,用于查找 FSX 脚本的引用

初始化选项

作为 initialize 请求的一部分应发送的选项

  • AutomaticWorkspaceInit - 设置为 true 将启动工作区加载而无需运行 fsharp/workspacePeekfsharp/workspaceLoad 命令。它将始终选择找到的列表中的顶级工作区 - 如果找到0个 .sln 文件,则选择所有项目在工作区中,如果找到1个 .sln 文件,则选择 .sln 文件,如果找到多个 .sln 文件,则选择具有最多项目的 .sln 文件。它设计用于在无法创建自定义用户界面选择工作区客户端中使用。

设置

  • FSharp.keywordsAutocomplete - 在自动完成列表中提供关键字,建议默认值:true
  • FSharp.ExternalAutocomplete - 提供来自未打开命名空间/模块的符号自动完成,在选择的打开 open,建议默认值:false
  • FSharp.Linter - 启用 FSharpLint 集成,提供额外的警告和代码操作修复,建议默认值:true
  • FSharp.UnionCaseStubGeneration - 启用代码操作以生成模式匹配案例,建议默认值:true
  • FSharp.UnionCaseStubGenerationBody - 定义模式匹配生成器使用的占位符体,建议默认值:"failwith \"Not Implemented\""
  • FSharp.RecordStubGeneration - 启用生成记录存根的代码操作,建议默认值:true
  • FSharp.RecordStubGenerationBody - 定义记录存根生成器使用的占位符体,建议默认值:"failwith \"Not Implemented\""
  • FSharp.InterfaceStubGeneration - 启用生成接口存根的代码操作,建议默认值:true
  • FSharp.InterfaceStubGenerationObjectIdentifier - 定义接口存根生成器使用的对象标识符,建议默认值:"this"
  • FSharp.InterfaceStubGenerationMethodBody - 定义接口存根生成器使用的占位符体,建议默认值:"failwith \"Not Implemented\""
  • FSharp.UnusedOpensAnalyzer - 启用未使用 open 代码检测,建议默认值:true
  • FSharp.UnusedDeclarationsAnalyzer - 启用未使用符号检测,建议默认值:true
  • FSharp.UseSdkScripts - 启用使用 .Net Core SDK 进行脚本文件类型检查和评估,否则将使用 .Net Framework 引用列表。推荐默认值:true。当前默认值:true
  • FSharp.SimplifyNameAnalyzer - 启用简化名称分析器和移除冗余限定符快速修复,推荐默认值:false
  • FSharp.ResolveNamespaces - 启用解析命名空间快速修复(如果符号来自尚未打开的模块/命名空间则添加open),推荐默认值:true
  • FSharp.EnableReferenceCodeLens - 启用引用计数代码镜头,推荐默认值:如果默认使用 --background-service-enabled 则为 true,否则为 false
  • FSharp.dotNetRoot - 设置查找 dotnet SDK 引用的根路径。主要用于 FSX 脚本。默认值:操作系统相关。在 Windows 上,C:\Program Files\dotnet;在 Unix 上,/usr/local/share/dotnet
  • FSI 的额外参数:仅使用 FSharp.FSIExtraParameters 的自身或 FSharp.FSIExtraInteractiveParametersFSharp.FSIExtraSharedParameters 的组合。前者预期将被后两者取代。有关更多详细信息,请参阅 #1210。FSAC 将发送警告,如果您混合使用不当。
    • FSharp.FSIExtraParameters - 一个数组,包含传递给 FSI 的额外运行时参数。这些当类型检查脚本时使用,以确保类型检查具有与您的 FSI 实例相同的上下文。例如,可以设置以下参数以启用类型检查的预览功能(如打开静态类)。

    • FSharp.FSIExtraInteractiveParameters - 当前由 FSAC 不使用,但可供编辑器插件使用,用于交互式 dotnet fsi 参数,而这些参数不与编译器共享。未来意图是从 FSAC 管理解释器,到那时,FSAC 将使用此参数。有关仅用于交互或与编译器共享的参数的详细信息,请参阅此参考资料

    • FSharp.FSIExtraSharedParameters - 传递给 FSI 的额外运行时参数的一个数组;具体为与编译器共享的参数。这些在类型检查脚本时使用,以确保类型检查具有与您的 FSI 实例相同的上下文。例如,可以设置以下参数以启用类型检查的预览功能(如打开静态类)。有关仅用于交互或与编译器共享的参数的详细信息,请参阅此参考资料

          "FSharp.fsiExtraSharedParameters": ["--langversion:preview"]
          "FSharp.fsiExtraInteractiveParameters": ["--readline-"]
      
调试设置

更改内部行为的设置。用于调试目的,而不是正常使用。

  • FSharp.Debug.DontCheckRelatedFiles - 通常检查文件也会检查相关的文件。这阻止了这种情况,并将文件检查限制为仅当前文件。
    默认:false
  • FSharp.Debug.CheckFileDebouncerTimeout - 文件检查被触发之前没有用户写活动(实践中:没有 LSP textDocument/didChange 通知)的持续时间(以毫秒为单位)。
    默认:250
  • FSharp.Debug.LogDurationBetweenCheckFiles:记录两次连续文件检查之间的持续时间。
    默认:false
  • FSharp.Debug.LogCheckFileDuration:记录文件检查操作的持续时间。
    默认:false

故障排除

文件监视器异常

您可能看到堆栈跟踪以 System.IO.IOException: kqueue() error at init, error code = ’0’ 结尾。这是由于 Mono 文件监视器可以保持打开的文件句柄数量的限制。重新启动 FsAutoComplete 或托管编辑器应该会有帮助。如果没有帮助,请尝试在 ~/.bash_profile 中设置 export MONO_MANAGED_WATCHER=disabled。请注意,在 OSX 上,此设置只有在您从终端启动 emacs 时才会生效。

维护者

此存储库的维护者有:

以前的维护者

产品 兼容和额外的计算目标框架版本。
.NET 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 标准化

此包没有依赖项。

版本 下载 最后更新
0.73.2 6,160 6/17/2024
0.73.1 3,693 5/23/2024
0.73.0 1,963 5/15/2024
0.72.3 1,913 5/5/2024
0.72.2 740 4/30/2024
0.72.1 844 4/25/2024
0.71.0 7,692 3/7/2024
0.70.1 3,270 2/13/2024
0.70.0 1,383 2/6/2024
0.69.0 2,321 1/14/2024
0.68.0 7,415 11/17/2023
0.67.0 2,928 10/28/2023
0.66.1 2,850 10/15/2023
0.66.0 1,724 10/15/2023
0.65.0 2,079 10/10/2023
0.64.1 2,269 10/6/2023
0.64.0 2,590 9/28/2023
0.63.1 2,645 9/18/2023
0.63.0 2,883 9/7/2023
0.62.0 4,133 8/21/2023
0.61.1 5,489 7/23/2023
0.61.0 2,921 7/16/2023
0.60.1 3,098 7/1/2023
0.60.0 2,324 6/15/2023
0.59.6 3,549 4/21/2023
0.59.5 1,588 4/21/2023
0.59.4 3,255 3/19/2023
0.59.3 1,725 3/19/2023
0.59.2 2,035 3/12/2023
0.59.1 2,745 2/26/2023
0.59.0 2,404 2/20/2023
0.58.4 2,445 2/4/2023
0.58.3 1,681 2/4/2023
0.58.2 4,613 11/8/2022
0.58.1 2,285 10/20/2022
0.58.0 2,071 10/9/2022
0.57.4 1,883 9/30/2022
0.57.3 2,051 9/27/2022
0.57.2 1,752 9/24/2022
0.57.1 1,544 9/23/2022
0.57.0 1,909 9/5/2022
0.56.2 2,182 8/19/2022
0.56.0 2,650 7/23/2022
0.55.0 2,065 7/12/2022
0.54.0 4,919 5/29/2022
0.53.2 2,252 5/13/2022
0.53.1 2,195 5/1/2022
0.53.0 1,619 4/30/2022
0.52.1 2,283 4/17/2022
0.52.0 3,075 4/14/2022
0.51.0 3,664 3/13/2022
0.50.1 1,910 3/12/2022
0.50.0 2,754 1/23/2022
0.49.6 1,868 1/16/2022
0.49.5 1,919 12/2/2021
0.49.4 2,669 11/20/2021
0.49.3 2,100 11/19/2021
0.49.1 1,890 11/14/2021
0.49.0 1,621 11/8/2021
0.48.2 1,966 10/27/2021
0.48.1 1,685 10/24/2021
0.48.0 1,707 10/23/2021
0.47.2 2,372 9/9/2021
0.47.1 1,810 8/5/2021
0.47.0 1,664 7/25/2021
0.46.7 1,842 6/29/2021
0.46.6 1,704 6/27/2021
0.46.5 1,723 6/21/2021
0.46.4 1,661 6/18/2021
0.46.3 1,869 6/17/2021
0.46.2 2,055 6/13/2021
0.46.1 1,799 6/9/2021

### 更改

* * 调整了两个新设置的逻辑,以防止过度通知用户。
* * 使用新的生成的 LSP 模型(感谢 @TheAngryByrd!)
* * [修复打开的命名空间的插入以供完成使用] (https://github.com/ionide/FsAutoComplete/pull/1300) (感谢 @MrLuje!)