Der Artikel richtet sich an Anfänger in der Programmierung in Scala, die ich selbst bin, und nur an diejenigen, die anfangen möchten, Programmcode in VSCode zu schreiben.
Zufällig war
dieses Video auf dem YouTube-Kanal von DevInsideYou die einzige Anleitung zur Arbeit mit Scala in Visial Studio Code. Es beschreibt ausführlich den Prozess der Installation und Einrichtung der Umgebung für VS Code und Sublime Text.
Dieser Artikel ist eine Adaption des Videos mit einigen Ergänzungen von mir. Sie können sich das Video ansehen oder diesen Artikel weiter lesen (oder beides tun). In diesem Fall hoffe ich, dass es für Sie nützlich ist.
Installation
Als erstes müssen wir
Scalu selbst sowie das
SBT- Projekt-Build-System installieren, sofern Sie dies noch nicht getan haben.
Für die Arbeit mit Scala in VSCode gibt es eine
Metals- Erweiterung.
Metalleigenschaften
- Genaue Diagnose beim Speichern:

- Übergang zur Definition und zum Hover-Hilfe-Popup:

- Typdefinition:

- Automatische Vervollständigung beim Wählen:

Hier sind nur die grundlegenden Funktionen aufgeführt. Eine ausführlichere Beschreibung finden Sie in der
Dokumentation .
Das Folgende ist ein Ausschnitt aus einem DevInsideYou-Video, das zeigt, wie Scala mit Code-Editoren interagiert:
Sprachserverprotokoll - Wird zwischen dem Client-Tool (IDE) und Servern verwendet, die für eine Programmiersprache spezifische Funktionen bereitstellen (automatische Vervollständigung, Übergang zur Definition usw.).
Metalle =
Meta (von Scalameta) +
LS (von Language Server - das Standardprotokoll für Sprachserver).
LSP reduziert die Komplexität von m-mal-n, indem es ein hohes Maß an Unterstützung für jede Programmiersprache in jedem Editor, jeder IDE oder jedem Client-Endpunkt für die einfachere m-plus-n-Aufgabe bietet.
LSP wurde von Microsoft erstellt, um eine gemeinsame Sprache zu definieren, die Programmiersprachenanalysatoren sprechen können. Microsoft Visual Studio Code unterstützt dieses Protokoll sofort.
Mit LSP können sich Sprachgemeinschaften auf einen leistungsstarken Sprachserver konzentrieren, der Code-Vervollständigung, Tooltips, Definition, Suche nach Links und vieles mehr bietet, während sich Redakteure und Client-Communities auf die Erstellung eines einzigen, leistungsstarken und intuitiven Benutzers konzentrieren können und eine idiomatische Erweiterung, die mit jedem Sprachserver kommunizieren kann, um sofort umfassende Sprachunterstützung zu bieten.
Projektinitialisierung
1 Weg
Initialisierung über
Scala-Datei . Öffnen Sie dazu den Projektordner und erstellen Sie darin die folgende Standardstruktur:
Beispielausgabe nach dem ersten Start von Metals:
2 Wege
Der zweite Weg beinhaltet die Verwendung von
Mühle . Erstellen Sie dazu die Datei build.sc im Projektordner und öffnen Sie sie.
Beispielausgabe nach dem ersten Start von Metals:
3 Wege (endgültig)
Initialisierung mit
SBT . Erstellen
Sie im Projektordner eine
build.sbt- Datei mit folgendem Inhalt:
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")
Beispielausgabe nach dem ersten Start von Metals:
Wenn Metals einen sbt-Arbeitsbereich erkennt, für den es keine
project / build.properties gibt , wird eine Popup-Benachrichtigung angezeigt, in der empfohlen wird, auf 0.13.7 zu aktualisieren:
Sie empfehlen die Verwendung von sbt Version 1.2.8. Nehmen Sie zum Ändern der sbt-Version die folgenden Änderungen an der
Datei project / build.properties vor :
Verwenden Sie den folgenden Befehl, um die sbt-Version zu überprüfen:
$ sbt sbtVersion
Wir initialisieren die sbt-Arbeitsumgebung im Projektordner:
$ sbt
Projekt importieren
Um das Projekt zu importieren, klicken Sie in der angezeigten Benachrichtigung auf die Schaltfläche
Build erstellen importieren oder geben Sie den folgenden Befehl ein:
Nachdem Sie Änderungen an einer Scala vorgenommen haben, wird diese automatisch von der Metals-Datei kompiliert:
Doktor
Wird verwendet, um potenzielle Probleme bei der Build-Konfiguration zu beheben. So starten Sie die Verwendung:
Fazit:
Bloop
Bloop ist ein Build-Server und CLI-Tool für Scala, das mit SBT zusammenarbeitet und experimentelle Unterstützung für andere Build-Tools wie
Maven ,
Gradle und
Mill bietet . Wenn Ihr Arbeitsbereich ein
.bloop- Verzeichnis mit Bloop-JSON-Dateien enthält, stellt Metals automatisch eine Verbindung her.
Vorteile von Bloop:- Kompiliert, testet und führt Scala-Code so schnell wie möglich aus. Die Kompilierung erfolgt automatisch, wenn der Quellcode geändert wird. Das Starten und Testen des Programms erfordert keine erneute Kompilierung.
- Einfache Integration in Build-Tools, Befehlszeilenanwendungen, Editoren und benutzerdefinierte Tools.
- Es wird separat von der IDE gestartet, hängt also nicht von der Fertigstellung oder dem Neustart ab.
- Dies beschleunigt das Öffnen des Projekts, da Metals den integrierten Server nicht für Sie ausführen muss.
Der folgende Ausschnitt aus dem Video „Glückliches Leben mit Scala-Metallen“ zeigt den Prozess der Erstellung der Anwendung:
Hinweis : Die Abbildung enthält einige Ungenauigkeiten.
Gabriele Petronella verweist in seinem Kommentar unter dem Video auf sie:
In der Abbildung sind die unteren BSP-Pfeile technisch falsch. Wie Sie (richtig) betont haben, kann das Build-Tool, wenn es BSP spricht, direkt in Metalle integriert werden, ohne Bloop zu durchlaufen. Der Wechsel von einem Build-Tool zu einem Bloop ist eine Möglichkeit, dem Build-Tool selbst eine BSP-Integration hinzuzufügen. Dies ist ein besonderer Schritt, bei dem BSP nicht verwendet wird. Weitere Informationen finden Sie hier .
Bloop lässt sich in IDEs und Texteditoren integrieren und bietet eine kurze Rückkopplungsschleife und eine zuverlässige Compilerdiagnose.
Bloop wird in Metallen auf zwei Arten verwendet:- Wenn Bloop auf Ihrem Computer installiert ist, stellt Metals einfach eine Verbindung zu einem vorhandenen Build-Server her (empfohlen).
- Wenn Bloop nicht installiert ist, lädt der Metalserver es herunter und führt es im einheitlichen Modus aus.
SemanticDB ist ein Datenmodell für semantische Informationen wie Zeichen und Typen über Programme in Scala und anderen Sprachen. Nach dem Kompilieren des Projekts sendet sbt-metal die Informationen an die lokale semanticdb-scala-Datenbank.
Bloop Installation
Laden Sie zunächst die
neueste Version herunter:
$ curl -L https://github.com/scalacenter/bloop/releases/download/v1.3.2/install.py | python
Als Nächstes müssen Sie eine Kopie des Bloop-Dienstes für den aktuellen Benutzer erstellen:
$ cp ~/.bloop/systemd/bloop.service ~/.config/systemd/user/
Um den Pfad zum Skript nicht ständig zu schreiben, können Sie bloop auch nach
/ usr / bin kopieren:
$ sudo cp /.bloop/bloop /usr/bin/
Starten Sie den systemctl-Daemon neu:
$ systemctl --user daemon-reload
Hinzufügen eines Bloop zum Start:
$ systemctl --user enable bloop
Wenn Sie jedoch nicht ständig mit Scala arbeiten, empfehle ich nicht, diesen Dienst vom Start zu entfernen. Sie können die automatische Ausführung mit dem folgenden Befehl deaktivieren:
$ systemctl --user disable bloop
Running Bloop:
$ systemctl --user start bloop
Informationen zur aktuellen Verbindung anzeigen:

Anwendungsstart
Wenn der Bloop-Dienst ausgeführt wird, können Sie Ihr kompiliertes Programm mit diesem Befehl im Projektverzeichnis ausführen:
$ bloop run <proj-name>
Sie können
~ / .config / Code / User / keybindings.json auch einen Hotkey hinzufügen:
{ "key": "meta+r", "command": "workbench.action.terminal.sendSequence", "args": { "text": "bloop run ${workspaceFolderBasename}\u000D" } }
Wenn kein Bloop-Dienst ausgeführt wird, können Sie die Anwendung direkt über sbt starten. In diesem Fall wird die Anwendung jedoch jedes Mal neu kompiliert, was sich auf den Start des Programms auswirkt:
$ sbt run
Ausgangsdaten
Ein kleiner Testfall eines Scala-Projekts liegt in
diesem Repository auf Github. Wenn Sie Ihre Projekte auch behalten
möchten , müssen Sie der
.gitignore- Datei die folgende Liste von Ausnahmen
hinzufügen :
*.class *.log project/ target/ .bloop/ .metals/