本文旨在供我本人使用Scala进行编程的初学者使用,也适用于希望开始使用VSCode编写程序代码的人员。
碰巧,在Visial Studio Code中使用Scala的唯一指南是YouTube频道DevInsideYou上的
此视频 。 它详细描述了VS Code和Sublime Text的安装和设置环境的过程。
本文是对视频的改编,其中包括我的一些补充。 您可以观看视频或继续阅读本文(或同时阅读本文),在这种情况下,希望对您有用。
安装方式
我们需要做的第一件事是安装
Scalu本身,以及
SBT项目构建系统(如果尚未安装)。
要在VSCode中使用Scala,有一个
Metals扩展。
金属特征
- 保存时准确诊断:

- 过渡到定义和悬停帮助弹出窗口:

- 类型定义:

- 拨号时自动完成:

此处仅列出基本功能,请按照
文档进行更详细的描述。
以下是DevInsideYou视频的片段,演示了Scala如何与代码编辑器进行交互:
语言服务器协议 -在客户端工具(IDE)与提供特定于编程语言的功能(自动完成,过渡到定义等)的服务器之间使用。
金属 =
Meta (来自Scalameta)+
LS (来自Language Server-标准语言服务器协议)。
LSP通过为更简单的m-n任务提供对任何编辑器,IDE或客户端端点中的任何编程语言的高度支持,降低了m-n的复杂性。
LSP是由Microsoft创建的,用于定义编程语言分析人员可以说的通用语言。 Microsoft Visual Studio Code开箱即用地支持此协议。
LSP使语言社区可以专注于一台高性能语言服务器,该服务器可以提供代码完成,工具提示,定义,搜索链接等等,而编辑者和客户社区可以专注于创建一个单一的,高性能,直观的惯用的扩展程序,可以与任何语言服务器进行通信,以立即提供深度语言支持。
项目初始化
1路
通过
scala文件进行初始化。 为此,请打开项目文件夹并在其中创建以下默认结构:
首次启动Metals之后的样本输出:
2路
第二种方法涉及使用
mill 。 为此,请在项目文件夹中创建build.sc文件并打开它。
首次启动Metals之后的样本输出:
3种方式(最终)
用
SBT初始化。 在项目文件夹中创建一个
build.sbt文件,其内容如下:
name := "scala-vscode-example" version := "0.1" scalaVersion := "2.13.1" triggeredMessage := Watched.clearWhenTriggered autoStartServer := false scalacOptions ++= Seq( "-feature", "-deprecation", "-language:implicitConversions", "-language:higherKinds" ) addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.10.3")
首次启动Metals之后的样本输出:
当Metals检测到没有
项目/ build.properties的sbt工作空间时,会出现一个弹出通知,建议您升级到0.13.7:
他们建议使用sbt版本1.2.8。 要更改sbt版本,请对
project / build.properties文件进行以下更改:
要检查sbt版本,请使用以下命令:
$ sbt sbtVersion
我们在项目文件夹中初始化sbt工作环境:
$ sbt
导入项目
要导入项目,请在出现的通知中单击“
导入构建”按钮,或输入命令:
对任何Scala进行更改后,Metals文件将自动对其进行编译:
医生
用于解决潜在的内部配置问题。 要开始使用:
结论:
布卢
Bloop是Scala的构建服务器和CLI工具,可与SBT一起使用,并且对
Maven ,
Gradle和
Mill等其他构建工具具有实验性支持。 如果您的工作区包含带有
bloop JSON文件的
.bloop目录,Metals将自动连接到该目录。
Bloop的好处:- 尽快编译,测试和运行Scala代码。 更改源代码后,会自动进行编译,程序的启动和测试不需要重新编译;
- 轻松与构建工具,命令行应用程序,编辑器和自定义工具集成;
- 它与IDE分开启动,因此它不取决于它的完成或重新启动;
- 由于Metals不需要为您运行内置服务器,因此可以加快项目的开放速度。
视频“ Scala Metals的幸福生活”中的以下片段显示了构建应用程序的过程:
注意 :图中存在一些错误。
Gabriele Petronella在视频下的评论中指出了这些观点:
在图中,下部的BSP箭头在技术上不正确。 正如您(正确)指出的那样,如果构建工具使用BSP,则可以直接与金属集成,而无需通过Bloop。 从构建工具迁移到Bloop是向构建工具本身添加BSP集成的一种方式,这是不使用BSP的特殊步骤。 在此处可以找到更多信息。
Bloop与IDE和文本编辑器集成在一起,可提供较短的反馈循环和可靠的编译器诊断。
Bloop在金属中以两种可能的方式使用:- 如果您的计算机上安装了Bloop,Metals将仅连接到现有的构建服务器(推荐);
- 如果未安装Bloop,Metals服务器将下载它并以纯模式运行它。
SemanticDB是一个数据模型,用于存储有关Scala和其他语言程序的语义信息,例如字符和类型。 编译项目后,sbt-metals将信息发送到本地语义数据库。
Bloop安装
首先,请下载
最新版本 :
$ curl -L https://github.com/scalacenter/bloop/releases/download/v1.3.2/install.py | python
接下来,您需要为当前用户创建bloop服务的副本:
$ cp ~/.bloop/systemd/bloop.service ~/.config/systemd/user/
另外,为了不经常写入脚本路径,可以将bloop复制到
/ usr / bin :
$ sudo cp /.bloop/bloop /usr/bin/
重新引导systemctl守护程序:
$ systemctl --user daemon-reload
在启动中添加bloop:
$ systemctl --user enable bloop
但是,如果您不打算继续使用Scala,建议您不要从启动中删除此服务。 您可以使用以下命令禁用自动运行:
$ systemctl --user disable bloop
运行bloop:
$ systemctl --user start bloop
显示有关当前连接的信息:

应用启动
当bloop服务运行时,您可以使用以下命令在项目目录中运行编译的程序:
$ bloop run <proj-name>
您还可以将热键添加到
〜/ .config / Code / User / keybindings.json :
{ "key": "meta+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "bloop run ${workspaceFolderBasename}\u000D" } }
如果您没有运行bloop服务,则可以直接通过sbt启动应用程序,但是,在这种情况下,每次都会重新编译应用程序,这将影响程序的启动时间:
$ sbt run
源数据
一个scala项目的小测试用例位于github上的
这个存储库中。 如果您还将保留项目,请确保将以下例外列表添加到
.gitignore文件:
*.class *.log project/ target/ .bloop/ .metals/