Scala 3的金属

2021-02-06 19:47:47

到2020年底,即将发布的Scala 3的工作正在加强。这是了解,探索并最终将Metals添加到您的工具箱的最佳时机!

如果您已经熟悉Metals,则可以使用Metals进行Scala 3项目设置。

无论您是一位经验丰富的Scala开发人员,还是现在就开始使用这种编程语言开始旅程,都有很大的机会将IntelliJ作为您的IDE。通过Scala插件,IntelliJ提供了在使用Scala时非常有用的功能。

尽管最流行,但IntelliJ也有其缺点。它很重,可能很慢。金属是一种替代方案,它包含完成工作所需的所有功能,并且轻巧,快捷。这就是为什么尽管这是一个新近创建的开源项目,但我们仍观察到Metals用户数量增加的原因。开发人员期望他们的IDE使他们的工作流高效且无缝。金属完美地完成了这项工作。

感谢Metals,我们可以在任何流行的文本编辑器(例如VS Code,Sublime Text,Vim,Emacs等)中支持Scala,而前面提到的Scala插件是专用于IntelliJ的工具。是什么让Metals如此无缝地与各种不同的文本编辑器无缝集成?

Metals背后的主要驱动力是语言服务器协议(LSP),该协议允许独立于编辑器呈现方式处理语言语法和语义。 Metals是语言服务器本身。任何支持LSP的编辑器都可以重用Metals语言服务器来提供Scala支持。可以通过扩展对某些编辑器进行进一步修改,以简化服务器设置。金属等具有VS Code和Vim扩展。

除了LSP,Metals还使用构建服务器协议(BSP),该协议可促进构建工具与IDE之间的通信。借助BSP客户端(在本例中为Metals语言服务器),编辑人员可以轻松地与BSP服务器进行通信以编译源代码,运行测试等。如果您想了解有关BSP的更多信息,请查阅本文。

Metals使用的主要BSP服务器是Bloop,用于编译,测试和运行Scala代码。它可以轻松地与不同的IDE和构建工具集成。点击此处了解详情。

正如您已经看到的那样,LSP和BSP是使Metals能够同时为众多编辑器和构建工具提供支持的工具。

尽管可以在各种不同的文本编辑器中使用Metals,但是Visual Studio Code可能是最受欢迎的,并且为用户提供了最佳的初学者友好型体验。因此,示例将来自此编辑器。在VS Code中,您可以像其他任何扩展程序一样获得Metals-通过VS Code市场进行安装。可以在文档中找到针对编辑器的确切安装教程,即VS Code,Vim,Sublime Text,Emacs和Eclipse。

以下说明将说明如何从头开始设置项目。如果要导入现有项目,也可以使用Metals轻松完成。为此,请打开项目目录。然后将提示您导入它。这样做,该项目就可以使用了!

Metals使用giter8提供了许多预定义的模板,这些模板可用于设置新的Scala项目。其中之一是Scala 3模板。让我们逐步完成使用Metals创建新项目的过程。

首先,打开一个空的工作区,选择Metals扩展,然后按New Scala项目按钮。或者,您可以使用Ctrl + Shift + P(Cmd + Shift + P)打开命令面板,然后键入Metals:New Scala project。

在几秒钟之后,Metals语言服务器启动后,将出现带有所有可用项目模板的下拉列表。在此示例中,我们将选择Scala 3模板。系统将提示您选择要在其中创建项目的目录。默认情况下,它将显示当前目录的父目录。您需要做的最后一件事是选择名称或使用Metals建议的默认名称。

现在,我们可以开始进行新的Scala 3项目了。要利用所有“金属”功能,唯一需要做的就是导入生成定义,然后将在弹出窗口中提示您进行定义。对于当前项目,将使用sbt定义构建。

不久之后,您将能够使用Metals运行和开发代码。现在打开src / main / scala / Main.scala文件。可以注意到的第一个功能是运行|位于main方法上方的debug,它将允许您通过单击它来运行程序。

目前,Metals支持高达3.0.0-M3的Scala 3版本,该版本现在可以随时发布。如您在下面的构建定义中所见,我们示例中的项目使用3.0.0-M2。通常,您可以在发布的第二天获得对新版本的支持。

Scala 3具有许多很棒的功能。工作表是一个很好的工具,可以用来进行实验,因为它可以让您快速评估Scala表达式。该工作表是具有* .worksheet.sc格式的文件。通过在命令面板中键入Metals:Create Worksheet来创建它。

作为一项新功能,Scala 3中的特征现在可以具有参数。将下面的代码粘贴到工作表中以进行尝试。

保存后,将立即评估工作表中的代码。如我们所见,评估的类字段与提供给特征的参数匹配。

编辑人员应提供一些功能,这对于开发人员的日常工作是必不可少的。让我们找出其中哪些可与Scala 3配合使用!

首先,让我们与Main.scala一起创建一个名为ColorEnum.scala的新文件。该文件包含枚举的示例定义,这是Scala 3中引入的新功能。

这是一项至关重要的功能,可让您找到定义给定符号的位置。要在VS Code中使用它,请将鼠标光标移到该符号上,然后按Ctrl(Cmd)。金属将提供定义预览。在仍然按住键的同时,在符号上单击鼠标左键以转到定义位置。或者,您可以右键单击它,然后选择“转到定义”。

我们已经知道如何从特定标识符导航到其定义。我们还可以利用Metals查找给定类,方法或值的所有用法。可以通过与符号定义导航类似的方式来完成。只需按住Ctrl(Cmd)并在定义标识符上单击鼠标左键即可。或者,您可以右键单击并选择转到参考。您将获得所有可以轻松预览和浏览的参考。

Scala 3符号也已经可以重命名!要重命名标识符,请右键单击它,然后选择“重命名符号”。所有参考将相应更改。

在大多数静态类型的语言(例如Scala)中,编辑者可以根据我们所处的上下文来建议符号的名称。Metals和Scala 3也是如此。一旦开始键入枚举大小写的名称,您将能够查看字段和方法的所有可能名称。尽管目前在Metals中,只有基本补全可以在Scala 3中使用,但我们仍然必须等待高级补全的实现,例如详尽的匹配/案例,这对于枚举可能非常有用。

如您所见,由于前面描述的功能,使用Scala 3已经可以以非常方便的方式进行操作。当然,还有很多工作要做。在不久的将来,我们希望Metals for Scala 3有哪些其他功能?我们可以肯定会期望高级完成,例如自动导入类或详尽匹配。除此之外,我们仍然缺少符号轮廓,实现以及代码操作,这也很不错。

还有一个仅在Scala 3中不可用的附加功能-转到源。不过,它可用于其他版本的Scala和Java。此功能对于故障排除很重要,当然,我们将来会希望拥有此功能。

幸运的是,对于渴望在他们的编辑器中直接尝试新功能的Scala爱好者来说,支持Metal中的Scala 3的工作要提前。 尽管尚不支持几个重要功能,但希望它们可以在Scala 3正式发布之前实现!