配置VSCode以与Scala一起使用


本文旨在供我本人使用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一起使用,并且对MavenGradleMill等其他构建工具具有实验性支持。 如果您的工作区包含带有bloop JSON文件的.bloop目录,Metals将自动连接到该目录。

Bloop的好处:

  • 尽快编译,测试和运行Scala代码。 更改源代码后,会自动进行编译,程序的启动和测试不需要重新编译;
  • 轻松与构建工具,命令行应用程序,编辑器和自定义工具集成;
  • 它与IDE分开启动,因此它不取决于它的完成或重新启动;
  • 由于Metals不需要为您运行内置服务器,因此可以加快项目的开放速度。

视频“ Scala Metals的幸福生活”中的以下片段显示了构建应用程序的过程:


注意 :图中存在一些错误。 Gabriele Petronella在视频下的评论中指出了这些观点:
在图中,下部的BSP箭头在技术上不正确。 正如您(正确)指出的那样,如果构建工具使用BSP,则可以直接与金属集成,而无需通过Bloop。 从构建工具迁移到Bloop是向构建工具本身添加BSP集成的一种方式,这是不使用BSP的特殊步骤。 此处可以找到更多信息。
Bloop与IDE和文本编辑器集成在一起,可提供较短的反馈循环和可靠的编译器诊断。

Bloop在金属中以两种可能的方式使用:
  1. 如果您的计算机上安装了Bloop,Metals将仅连接到现有的构建服务器(推荐);
  2. 如果未安装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/ 

Source: https://habr.com/ru/post/zh-CN469707/


All Articles