fsautocomplete 0.73.2
dotnet tool install --global fsautocomplete --version 0.73.2
dotnet new tool-manifest # if you are setting up this repo dotnet tool install --local fsautocomplete --version 0.73.2
#tool dotnet:?package=fsautocomplete&version=0.73.2
nuke :add-package fsautocomplete --version 0.73.2
FsAutoComplete
FsAutoComplete 项目 (FSAC) 为编辑器提供了丰富的编辑或智能感知功能的后端服务。
可以使用语言服务器协议进行托管。
目前正被以下所使用
它基于
- FSharp.Compiler.Service 为 F# 语言信息。
- Ionide.ProjInfo 用于项目/解决方案管理。
- FSharpLint 用于悬停功能。
- Fantomas 用于 F# 代码格式化。
构建和测试
要求
- .NET SDK,请见 global.json 获取确切版本。最低要求:>= 6.0,推荐:>= 7.0
- 恢复 dotnet 工具以安装本地 Paket
dotnet tool restore - 使用
dotnet build构建 FSAC
- 要在
~/bin目录中构建 release fsautocomplete 二进制文件,请使用LocalRelease目标 - 要构建、运行所有测试并创建包,请使用
All目标
DevContainer
该存储库还提供了可以与 VSCode 的 Remote Containers 扩展一起使用的 DevContainer 定义 - 使用它来获得稳定的开发环境
Gitpod.io
此存储库已准备好使用 Gitpod 进行基于 Web 的 VSCode 风格的 IDE。点击下面的按钮开始!
创建一个新代码修复
检出 本指南 以开始新的代码修复。
发布
- 将 CHANGELOG.md 中的发布说明更新为
Unreleased部分的当前版本。使用 keepachangelog.com 中的Added、Fixed等部分标题。 - 对于 Changelog 中的各个部分,使用例如
BUGFIX、FEATURE和ENHANCEMENT的标题,并附带链接到带有 PR 标题的 PR。 - 通过
Promote目标运行PromoteFAKE目标,从当前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://:4317"
启动 FsAutocomplete(通过code .或dotnet fsautocomplete)
执行一些操作,例如打开文档、保存、获取工具提示等。
然后在https://:16686/中打开以检查跟踪。
通信协议
FsAutoComplete支持LSP作为通信协议。
支持的LSP端点
initializetextDocument/didOpentextDocument/didChangetextDocument/didSavetextDocument/hovertextDocument/completion&completionItem/resolvetextDocument/renametextDocument/definitiontextDocument/typeDefinitiontextDocument/implementationtextDocument/codeAction:- 移除未使用的
open - 解析命名空间/模块
- 用
_替换未使用的符号 - 根据错误消息修复拼写错误
- 删除多余的限定符
- 为
IDisposable添加缺失的new关键字 - 在模式匹配中生成所有DU案例的案例
- 生成空接口实现
- 由FSharpLint提出的修复建议
- 移除未使用的
textDocument/codeLens&codeLens/resolve- 代码镜头签名
- 引用号码代码镜头
textDocument/formatting- 通过 fantomas 驱动textDocument/referencestextDocument/documentHighlighttextDocument/signatureHelptextDocument/documentSymboltextDocument/inlayHinttextDocument/inlineValueworkspace/didChangeWatchedFilesworkspace/didChangeConfigurationworkspace/symbol
自定义端点
自定义端点使用(消息体)PlainNotification类型和与旧JSON协议完全相同的序列化格式进行字符串格式序列化。
fsharp/signature- 接受TextDocumentPositionParams,以格式化字符串返回给定位置符号的签名fsharp/signatureData- 接受TextDocumentPositionParams,以DTO返回给定位置符号的签名fsharp/lineLens- 接受ProjectParms(Project字段包含F#文件路径),返回应显示代码镜头的位置fsharp/compilerLocation- 无输入,返回FCS、FSI和MsBuild的路径fsharp/compile- 接受ProjectParms,尝试编译项目,返回错误列表和退出状态码fsharp/workspacePeek- 接受WorkspacePeekRequest,返回可能的工作空间列表(解决解决方案文件,如果没有解决方案文件,则返回项目列表)fsharp/workspaceLoad- 接受WorkspaceLoadParms,在后台加载给定项目列表,通过fsharp/notifyWorkspace通知提供部分结果fsharp/project- 接受ProjectParms,加载给定项目fsharp/fsdn- 接受ProjectParms(Project字段包含查询字符串),查询FSDN并返回函数列表fsharp/f1Help- 接受TextDocumentPositionParams,返回给定位置符号的MSDN文档的URLfsharp/documentation- 接受TextDocumentPositionParams,返回给定位置符号的文档数据,用于InfoPanelfsharp/documentationSymbol- 接受DocumentationForSymbolReuqest,从给定程序集返回给定符号的文档数据,用于InfoPanelfsproj/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- 设置此标志启用了额外的日志输出到stderrDOTNET_ROOT- 设置此环境变量,将设置 dotnet SDK 根目录,用于查找 FSX 脚本的引用
初始化选项
作为 initialize 请求的一部分应发送的选项
AutomaticWorkspaceInit- 设置为true将启动工作区加载而无需运行fsharp/workspacePeek和fsharp/workspaceLoad命令。它将始终选择找到的列表中的顶级工作区 - 如果找到0个.sln文件,则选择所有项目在工作区中,如果找到1个.sln文件,则选择.sln文件,如果找到多个.sln文件,则选择具有最多项目的.sln文件。它设计用于在无法创建自定义用户界面选择工作区客户端中使用。
设置
FSharp.keywordsAutocomplete- 在自动完成列表中提供关键字,建议默认值:trueFSharp.ExternalAutocomplete- 提供来自未打开命名空间/模块的符号自动完成,在选择的打开open,建议默认值:falseFSharp.Linter- 启用 FSharpLint 集成,提供额外的警告和代码操作修复,建议默认值:trueFSharp.UnionCaseStubGeneration- 启用代码操作以生成模式匹配案例,建议默认值:trueFSharp.UnionCaseStubGenerationBody- 定义模式匹配生成器使用的占位符体,建议默认值:"failwith \"Not Implemented\""FSharp.RecordStubGeneration- 启用生成记录存根的代码操作,建议默认值:trueFSharp.RecordStubGenerationBody- 定义记录存根生成器使用的占位符体,建议默认值:"failwith \"Not Implemented\""FSharp.InterfaceStubGeneration- 启用生成接口存根的代码操作,建议默认值:trueFSharp.InterfaceStubGenerationObjectIdentifier- 定义接口存根生成器使用的对象标识符,建议默认值:"this"FSharp.InterfaceStubGenerationMethodBody- 定义接口存根生成器使用的占位符体,建议默认值:"failwith \"Not Implemented\""FSharp.UnusedOpensAnalyzer- 启用未使用open代码检测,建议默认值:trueFSharp.UnusedDeclarationsAnalyzer- 启用未使用符号检测,建议默认值:trueFSharp.UseSdkScripts- 启用使用 .Net Core SDK 进行脚本文件类型检查和评估,否则将使用 .Net Framework 引用列表。推荐默认值:true。当前默认值:trueFSharp.SimplifyNameAnalyzer- 启用简化名称分析器和移除冗余限定符快速修复,推荐默认值:falseFSharp.ResolveNamespaces- 启用解析命名空间快速修复(如果符号来自尚未打开的模块/命名空间则添加open),推荐默认值:trueFSharp.EnableReferenceCodeLens- 启用引用计数代码镜头,推荐默认值:如果默认使用--background-service-enabled则为true,否则为falseFSharp.dotNetRoot- 设置查找 dotnet SDK 引用的根路径。主要用于 FSX 脚本。默认值:操作系统相关。在 Windows 上,C:\Program Files\dotnet;在 Unix 上,/usr/local/share/dotnet- FSI 的额外参数:仅使用
FSharp.FSIExtraParameters的自身或FSharp.FSIExtraInteractiveParameters和FSharp.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- 通常检查文件也会检查相关的文件。这阻止了这种情况,并将文件检查限制为仅当前文件。
默认:falseFSharp.Debug.CheckFileDebouncerTimeout- 文件检查被触发之前没有用户写活动(实践中:没有 LSPtextDocument/didChange通知)的持续时间(以毫秒为单位)。
默认:250FSharp.Debug.LogDurationBetweenCheckFiles:记录两次连续文件检查之间的持续时间。
默认:falseFSharp.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 已计算。 |
此包没有依赖项。
| 版本 | 下载 | 最后更新 |
|---|---|---|
| 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!)