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
目标运行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
- 接受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
- 设置此标志启用了额外的日志输出到stderr
DOTNET_ROOT
- 设置此环境变量,将设置 dotnet SDK 根目录,用于查找 FSX 脚本的引用
初始化选项
作为 initialize
请求的一部分应发送的选项
AutomaticWorkspaceInit
- 设置为true
将启动工作区加载而无需运行fsharp/workspacePeek
和fsharp/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.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
- 通常检查文件也会检查相关的文件。这阻止了这种情况,并将文件检查限制为仅当前文件。
默认:false
FSharp.Debug.CheckFileDebouncerTimeout
- 文件检查被触发之前没有用户写活动(实践中:没有 LSPtextDocument/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 已计算。 |
此包没有依赖项。
版本 | 下载 | 最后更新 |
---|---|---|
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!)