课程:SharpLsp 中的代码操作,从 Cmd+. 到 F# 快速修复、生成 match 用例、跨文件重命名、C# 生成方法和添加 using
文字稿
欢迎来到 SharpLsp 代码操作快速课程!接下来几分钟,你将学会在任何系统上用 F# 和 C# 修复代码、生成代码,以及跨文件重命名。
首先,你只需要记住一个快捷键。在 Mac 上,按 Command+.。
在 Windows 和 Linux 上,是 Ctrl+.。
或者直接点击灯泡图标。
无论哪种方式,菜单只会列出适用于光标、选区或其下诊断的操作。
那么,这些操作从哪里来?有三个来源。
诊断:警告或错误会提供它自己的修复。
光标:可以重塑的类型或成员。
还有选区:作用于你所选代码的重构。
在空行上,菜单是空的。SharpLsp 从不瞎猜。
我们从 F# 开始。这个 describe 函数对 stage 做 match,但漏了一个联合用例。
编译器用警告 FS0025 标出它:模式匹配不完整。
按 Command+.,选择 Generate missing union case,SharpLsp 就会替你写出这个分支。
想要兜底分支?Add wildcard case 也就在旁边。
这是结果。新分支恰好匹配了缺失的那个用例,
因为 F# 编译器知道联合类型的每一个用例。你只需要写函数体。
这只是整套 F# 修复工具中的一个,每一个都对应一条编译器诊断。
名字无法解析?添加 open。绑定未使用?加上下划线前缀。值被丢弃?用管道传给 ignore。
除了 match,SharpLsp 还能生成缺失的记录字段和接口成员存根。
重命名和代码操作是分开的。把光标放在符号上,按 F2。
输入新名字,然后按回车。
所有引用都会跟着改,即使在其他文件里。这里,Program.fs 中的调用也更新了。
在 C# 中,重命名基于 Roslyn 加载的解决方案;在 F# 中,基于已加载的 F# 项目。
现在看 C#。一个很受欢迎的做法:先写出你希望存在的调用。比如 Receipt(invoice)。
它还不存在,所以编译器报错。
Command+.,选择 Generate method。
Roslyn 会写出存根,并根据你的调用确定参数类型。
接下来,在没有导入命名空间的情况下使用一个类型,比如 StringBuilder。
快速修复会把 using System.Text 放在最上面。
你也可以就地写出完全限定名,甚至生成一个新类。
这些都直接来自 SharpLsp 内置的 Roslyn 代码修复提供程序。
那么底层发生了什么?编辑器会请求光标处的代码操作。
Roslyn 或 F# 编译器返回一个标题列表,这让菜单保持快速。
只有当你选中一项时,SharpLsp 才会解析它并计算编辑。
结果是一个工作区编辑,可以同时修改多个文件。
如果某个操作已经过时,你得到的是没有编辑,而绝不是瞎猜。
有两样东西不属于代码操作。
SharpLsp 不负责格式化代码。C# 用 CSharpier,F# 用 Fantomas。
Sort Members 则是一个独立命令。在解决方案资源管理器中右键点击一个 C# 类型,即可重新排列它的成员。
来回顾一下。Command+. 或 Ctrl+. 会打开所有适用的操作。
F# 修复跟随编译器诊断,还能写出完整的 match 用例。
F2 可以跨文件重命名。
在 C# 中,你可以先写调用,再生成方法。
完整课程在 SharpLsp 文档里。现在就去修代码吧!