ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

April 2021 (Version 1.56)

Update 1.56.1: Das Update behebt diese Sicherheitsprobleme.

Update 1.56.2: Das Update behebt diese Probleme.

Downloads: Windows: x64 Arm64 | Mac: Universal Intel Silicon | Linux: deb rpm tarball Arm snap


Willkommen zur April 2021-Version von Visual Studio Code. Das VS Code-Team war diesen Monat fleißig und hat an mehreren längerfristigen Updates gearbeitet. Werfen Sie einen Blick in den Abschnitt Vorschaufunktionen, um zu erfahren, was als Nächstes kommt. Hier sind einige der Highlights dieser Version

Wenn Sie diese Release Notes online lesen möchten, gehen Sie zu Updates auf code.visualstudio.com.

Begleiten Sie uns live am Dienstag, 11. Mai, um 8 Uhr Pacific Time (16 Uhr London) beim Livestream des VS Code-Teams, um eine Demo der Neuerungen dieser Version zu sehen und uns live Fragen zu stellen.

Insiders: Möchten Sie neue Funktionen so schnell wie möglich ausprobieren? Sie können den nächtlichen Insiders-Build herunterladen und die neuesten Updates ausprobieren, sobald sie verfügbar sind.

Workbench

Verbessertes Hover-Feedback für Aktionen

Wir haben das Maus-Hover-Feedback für Aktionen im gesamten Workbench geändert, um eine bessere Benutzererfahrung für anklickbare Aktionen zu bieten.

Actions hover feedback is improved with a background color.

Hinweis für unbenannte Editoren

Wir haben festgestellt, dass viele neue Benutzer nicht wissen, dass eine Sprache festgelegt werden muss, um die volle Sprachunterstützung von VS Code zu erhalten. Um dieses Problem zu beheben, haben wir einen Hinweis für unbenannte Editoren eingeführt, der Benutzern hilft, den richtigen Sprachmodus einzustellen. Der Hinweis für unbenannte Editoren ist für fortgeschrittene Benutzer möglicherweise nicht hilfreich, verschwindet sofort, wenn Sie mit der Eingabe beginnen, oder Sie können Nicht mehr anzeigen auswählen, um den Hinweis nie wieder anzuzeigen.

Untitled editor shows an untitled hint

Standard-Editor und Notebook-Auflösung

Wenn Sie zwei Editoren haben, die beide angeben, dass sie Ihr Standard-Editor für eine Ressource sein sollen (z. B. ein Bildbetrachter und ein Bildbearbeitungsprogramm), erhalten Sie eine Aufforderung zur Lösung des Konflikts.

Im kurzen Video unten öffnet der Benutzer eine PNG-Datei, die zwei Editoren zugeordnet ist. Die Benachrichtigung ermöglicht es dem Benutzer, den Luna Paint Image Editor weiterhin zu verwenden oder einen neuen Standard zu konfigurieren, was er tut und mit dem Hex-Editor beginnt, der Binärdateien bearbeiten kann.

A image editor is opened and the user is prompted with a notification to configure their default editor or keep the current one

Aktualisierte benutzerdefinierte Dialogfelder

Wir haben unsere benutzerdefinierten Dialogstile aktualisiert, die Sie über "window.dialogStyle": "custom" aktivieren können. VS Code dimmt nun den Hintergrund, um den Dialog stärker hervorzuheben, und verwendet den Stil der sekundären Schaltfläche, wenn mehr als eine Aktion vorhanden ist.

An example of a custom dialog with a dimmed background and secondary buttons

Produkt-Symbolik-Thema: Fluent Icons

Sie können den Stil der sekundären Schaltfläche über die folgenden Farbtokens thematisieren

  • button.secondaryBackground
  • button.secondaryForeground
  • button.secondaryHoverBackground

Automatische Aktualisierung nur aktivierter Erweiterungen

Sie können VS Code jetzt so konfigurieren, dass nur Ihre aktuell aktivierten Erweiterungen automatisch aktualisiert werden.

Auto update only enabled extensions

Thema: GitHub Light Theme

Terminal

Verbesserungen bei Profilen

In der letzten Iteration haben wir Terminalprofile eingeführt. Das Terminal unterstützt jetzt die Einstellung eines Standardprofils mit den Einstellungen terminal.integrated.defaultProfile.<platform>.

Umgebung und Symbolunterstützung wurden ebenfalls zum Profilsystem hinzugefügt

"terminal.integrated.profiles.windows": {
  "PowerShell": {
    "source": "PowerShell",
    "overrideName": true,
    "icon": "terminal-powershell",
    "env": {
      "TEST_VAR": "value"
    }
  }
},
"terminal.integrated.defaultProfile.windows": "PowerShell",

Zukünftig sind diese Einstellungen der empfohlene Weg, die Standard-Terminalkonfiguration zu wechseln, und die Einstellungen terminal.integrated.shell und terminal.integrated.shellArgs wurden als veraltet markiert.

Neuer Terminal-Selektor

Profile und Einstellung Shortcuts wurden aus dem Dropdown-Menü entfernt und in einen neuen +-Button mit einem Dropdown-Menü verschoben.

When selected, the dropdown button displays a menu

Dies unterstützt auch die Erstellung eines neuen geteilten Terminals basierend auf einem Nicht-Standardprofil.

Neue Tastenkombinationen

Das Terminal hat in dieser Version mehrere neue Standard-Tastenkombinationen

  • Zum vorherigen Terminal wechseln - Strg+BildAuf (macOS Cmd+Umschalt+])
  • Zum nächsten Terminal wechseln - Strg+BildAb (macOS Cmd+Umschalt+[)
  • Fokus auf Terminal-Tabs-Ansicht - Strg+Umschalt+\ (macOS Cmd+Umschalt+\) - Vorschau auf Terminal-Tabs

Wie immer kann die vollständige Liste der Änderungen im Tastenkombinationssystem eingesehen oder benutzerdefinierte Tastenkombinationen hinzugefügt werden.

Linux Auswahl-Einfügebefehl

Der neue Befehl workbench.action.terminal.pasteSelection ist unter Linux verfügbar, um vom Auswahl-Clipboard in das Terminal einzufügen.

Berechtigungen für Terminal-Arbeitsbereichs-Shells geändert

Um zukünftige Änderungen im Zusammenhang mit Profilen zu unterstützen, wurde die Aufforderung, die angezeigt wurde, wenn Terminaleinstellungen in .vscode/settings.json vorhanden waren, entfernt und durch eine Einstellung ersetzt, um die Verwendung von Arbeitsbereichseinstellungen zu ermöglichen. Beachten Sie, dass dies in nicht vertrauenswürdigen Arbeitsbereichen gefährlich sein kann.

"terminal.integrated.allowWorkspaceConfiguration": true

Wenn Arbeitsbereich-Vertrauen standardmäßig aktiviert ist, werden wir dies entfernen und dieses System verwenden.

Aufgaben

Entfernung von Tasks 0.1.0 mit Upgrade

Tasks 2.0.0 ist seit über drei Jahren verfügbar und funktioniert gut. Tasks 0.1.0 wurden während dieser Zeit als veraltet markiert. Angesichts unseres Ziels, Node.js-freie Renderer, wurden Tasks 0.1.0 gelöscht, anstatt in die Node.js-freie Welt übernommen zu werden. Wenn Sie einen Ordner öffnen, der 0.1.0 Tasks enthält, werden diese automatisch für Sie auf Version 2.0.0 aktualisiert.

Tasks upgrade notification

Kein "Task"-Präfix in Terminal-Tabs

Bei Verwendung der neuen Funktion Terminal-Tabs wird das Präfix "Task" nicht mehr vor dem Terminalnamen hinzugefügt. Stattdessen werden Tasks durch das "Werkzeug"-Symbol angezeigt, um den verfügbaren Platz besser zu nutzen.

Tasks as terminal tabs

Bessere Übereinstimmung mit eslint-stylish

Der Problem-Matcher $eslint-stylish stimmt besser mit mehrzeiligen Problemen überein.

Debugging

Verbesserungen der Breakpoints-Ansicht

Zugriffstyp wird für Daten-Breakpoints angezeigt

Für Daten-Breakpoints zeigt VS Code nun den Zugriffstyp ("Read", "Write" oder "Access") neben dem Namen in der Breakpoints-Ansicht an.

The Breakpoints view shows the access types "Read", "Write" and "Access" being rendered next to the breakpoint name

Bessere Status-/Fehlerberichte für Ausnahme-Breakpoints

Für Ausnahme-Breakpoints zeigt VS Code nun deren individuellen Verifizierungsstatus und detaillierte Gründe in der Breakpoints-Ansicht an. Wenn ein Ausnahme-Breakpoint nicht verifiziert werden kann (z. B. weil seine Bedingung einen Syntaxfehler enthält), wird er ausgegraut und beim Überfahren mit der Maus wird die entsprechende Fehlermeldung angezeigt.

The Breakpoints view shows disabled exception breakpoints that on hover show the error message

Weitere UI-Verbesserungen

Alternierendes Verhalten für Stopp- und Trennen-Befehle

Eine Debugging-Sitzung wird normalerweise über die Befehle Debug: Stopp und Debug: Trennen beendet. Wenn die Debugging-Sitzung vom Typ launch ist, stoppt der Befehl Stopp nicht nur die Sitzung, sondern beendet auch den Debuggee. Für Debugging-Sitzungen vom Typ attach gibt es den Befehl Trennen, der das Debugging stoppt und die Ausführung des Debuggees fortsetzt.

Mit dieser Version ist es nun möglich, dieses Verhalten umzukehren, indem die Alt-Taste gedrückt gehalten wird, während der Befehl über die Debug-Toolbar ausgelöst wird. Das Ändern des Verhaltens ermöglicht es, den Debuggee für Debugging-Sitzungen vom Typ launch weiterlaufen zu lassen und den Debuggee für Debugging-Sitzungen vom Typ attach zu beenden. Neben der Verwendung von Alt mit den Standardbefehlen ist es auch möglich, sowohl die Befehle Debug: Stopp als auch Debug: Trennen über die Befehlspalette für Debugging-Sitzungen vom Typ launch und attach aufzurufen.

Das alternative Verhalten ist nur für Debug-Erweiterungen verfügbar, die sich für diese Funktion entschieden haben.

Verbesserter Ablauf für die Installation fehlender Debug-Erweiterungen

Wir haben den Ablauf verbessert, falls ein Benutzer mit dem Debugging beginnen möchte, aber die erforderliche Sprach-Erweiterung, die Debugging-Unterstützung bietet (wie Python oder Java), nicht installiert hat. Wenn dies geschieht, fordert VS Code den Benutzer nun auf, die entsprechende Erweiterung zu installieren.

VS Code prompts to install the Python extension if it is missing

Aufrufstapel-Spalten-Stopp-Indikator

VS Code rendert nun den Indikator der Aufrufstapel-Spalte jedes Mal, wenn ein Debuggee an einer Zeile angehalten wird. Dies sollte helfen, zu identifizieren, wo in einer Zeile das Programm gerade angehalten ist.

An code execution is stopped and a column indicator is rendered in the middle of a line

Inline-Werte standardmäßig für einige Sprachen

Die Debugger-UI von VS Code unterstützt Inline-Werte, die Variablenwerte inline im Editor anzeigen, wenn durch den Quellcode geschritten wird. Diese Funktion basiert auf einer generischen Implementierung im VS Code-Kern und ist daher möglicherweise nicht für alle Sprachen perfekt geeignet, zeigt manchmal sogar falsche Werte an, da der generische Ansatz die zugrunde liegende Quellsprache nicht versteht. Aus diesen Gründen war die Funktion nicht standardmäßig aktiviert.

Mit einer neuen Debugger-Erweiterungs-API ist es nun möglich, dass Sprach-Erweiterungen eine korrekte Inline-Werte-Unterstützung bieten, und wir aktivieren die Funktion Verbesserte Inline-Werte standardmäßig.

Um diese Funktion zu aktivieren, hat die Einstellung debug.inlineValues einen neuen (standardmäßigen) Wert auto. Wenn auf auto gesetzt, werden Inline-Werte automatisch für diejenigen Sprachen aktiviert, die eine "verbesserte Inline-Wert"-Unterstützung haben.

Die Debugger for Java-Erweiterung ist eine der ersten Debugger-Erweiterungen, die die API übernimmt. In der unten stehenden Abbildung werden die korrekten Werte der Java-Variablen neben ihrer Verwendung angezeigt.

Java extension displaying inline values in the editor while debugging

Sie können Inline-Werte beim Debuggen von PowerShell-Skripten mit der Erweiterung Inline Values support for PowerShell erhalten.

Debug-Ansicht beim Unterbrechen angezeigt

Der Standardwert der Einstellung debug.openDebug ist nun openOnDebugBreak, sodass VS Code bei jedem Treffer eines Breakpoints die Debug-Ansicht öffnet. Die Debug-Ansicht wird auch beim ersten Start einer Sitzung angezeigt.

JavaScript-Debugging

Wie üblich finden Sie die vollständige Liste der Änderungen im Changelog von vscode-js-debug.

Verbesserte Auffindbarkeit des Breakpoint-Diagnosetools

Basierend auf Heuristiken zeigt VS Code eine Benachrichtigung an, die das Öffnen des Breakpoint-Diagnosetools vorschlägt, wenn es erkennt, dass der Benutzer möglicherweise Schwierigkeiten hat, Breakpoints zu binden.

Notification that reads "It looks like you might be having trouble with breakpoints, would you like to open our diagnostic tool?"

Diese Aufforderung wird zunächst nur für eine Teilmenge von Benutzern angezeigt, während wir die Wirksamkeit und Durchsetzbarkeit testen.

Unterstützung für private Klassenfelder

Private Klassenfelder sind nun sichtbar und können im Debugger inspiziert werden.

Notebooks

Zeilennummern umschalten

Sie können die Zeilennummern einer Zelle in der aktuellen Sitzung jetzt temporär über die Zell-Toolbar umschalten oder die Sichtbarkeit von Zeilennummern für alle Notebooks über die Einstellung notebook.lineNumbers ändern.

Toggle line number of a cell

Position der Zell-Toolbar pro Dateityp

Die Position der Zell-Toolbar kann nun pro Dateityp über die Einstellung notebook.cellToolbarLocation angepasst werden. Sie können beispielsweise die Zell-Toolbar auf der rechten Seite für GitHub Issue Notebooks haben, aber auf der linken Seite für Jupyter Notebooks.

Mathematikunterstützung in Markdown-Zellen

Sie können jetzt mathematische Gleichungen innerhalb von Markdown-Zellen in Notebooks verwenden.

Math being rendered in a Jupyter notebook

VS Code verwendet KaTeX zum Rendern der Gleichungen. Es gibt zwei Möglichkeiten, eine mathematische Gleichung in eine Markdown-Zelle einzubetten

  • Mit einfachen Dollarzeichen: $...$. Dies erstellt eine Inline-Mathematikgleichung.
  • Mit doppelten Dollarzeichen: $$...$$. Dies erstellt eine zentrierte Block-Mathematikgleichung.

Wir haben die Mathematikunterstützung mithilfe einer experimentellen Notebook-Markup-Renderer-API implementiert, die sich noch in der Entwicklung befindet. Unser zukünftiges Ziel mit dieser API ist es, auch Erweiterungen zu ermöglichen, die das Rendern von Markdown in Notebooks zu erweitern.

Sprachen

Markdown-Vorschau Typografiestützung

Die neue Einstellung markdown.preview.typographer ermöglicht die Aktivierung von intelligenten Anführungszeichen und einfachen typografischen Ersetzungen in der integrierten Markdown-Vorschau.

Im folgenden Beispiel wird Markdown-Text wie (c) automatisch durch das Copyright-Symbol © in der Vorschau ersetzt.

Smart quotes and text replacement in the Markdown preview

Die Einstellung markdown.preview.typographer ist standardmäßig deaktiviert.

Mehr Dateien als Shellskripte erkannt

Dateien mit den Dateiendungen .xsession und .xprofile werden automatisch als Shellskripte erkannt.

Vorschau-Funktionen

Terminal-Tabs

Tabs im Terminal sind als Vorschaufunktion verfügbar und können mit der folgenden Einstellung aktiviert werden

"terminal.integrated.tabs.enabled": true

The tabs view is a split pane to the right of two split terminals. It contains icons and labels for each terminal instance.

Wenn aktiviert, wird die neue Tab-Ansicht standardmäßig nur angezeigt, wenn mindestens zwei Terminals vorhanden sind. Bei einzelnen Terminals wird der Tab wie folgt in den Panel-Titel "eingebettet"

Terminal tab inlined into the panel title for a single terminal

Jeder Tab unterstützt über das Kontextmenü mehrere Aktionen.

Right-clicking on a tab displays a menu

Teilen und Terminal schließen sind bei Hover verfügbar.

Hovering the tab item shows inline action icons

Wir haben versucht, das Verhalten der neuen Tabs an das des Explorers anzupassen. Hier sind einige der anderen Verhaltensweisen

  • Doppelklicken auf den leeren Bereich erstellt ein neues Terminal.
  • Doppelklicken auf den Trennstrich schaltet die Breite der Tab-Ansicht zwischen der "idealen" Größe, die alle Titel ohne Kürzung anzeigt, und einer schmalen Ansicht, die nur die Symbole anzeigt, um.
  • Die Tabs können über die Einstellung terminal.integrated.tabs.location nach links verschoben werden.
  • Verschiedene andere Konfigurationseinstellungen sind unter terminal.integrated.tabs verfügbar.

Terminal-Status

Neben Tabs haben wir das Konzept der Status im Terminal eingeführt. Ein Terminal kann viele Status haben, die jeweils einen Zustand darstellen, in dem sich das Terminal vorübergehend befinden kann, wobei der mit der höchsten Schwere neben dem Tab angezeigt wird. Statussymbole erscheinen rechts vom Terminaltitel in der Tab-Ansicht. Beim Hover werden Details zum Status und alle zugehörigen Aktionen angezeigt.

On a tab associated with a terminal that requires a relaunch, a yellow triangle with an exclamation mark is to the right of the terminal title

Derzeit werden diese Zustände unterstützt

  • Neustart erforderlich: Ein Warnsymbolstatus wird verwendet, wenn eine Erweiterung die Umgebung eines Terminals ändern möchte.
  • Getrennt: Ein Steckersymbolstatus wird verwendet, wenn das Terminal die Verbindung zu seinem Prozess verliert.
  • Glocke: Ein Glockensymbol erscheint, wenn die Glocke über die Einstellung terminal.integrated.enableBell aktiviert ist und die Terminalglocke ausgelöst wird.

Wir planen, bald Task-Status zu unterstützen, damit der Laufzeitstatus von Tasks auf einen Blick verfügbar ist, auch ohne den Tab zu aktivieren.

Walkthroughs auf der Startseite

Wir haben die walkthroughs-Beiträge zur Platzierung von Inhalten auf der Startseite erweitert, um Markdown sowohl in den Schrittbeschreibungen als auch im Hauptinhalt der Schritte zu ermöglichen. Erweiterungsbeiträge zur Startseite sind eine experimentelle Funktion und können mit "workbench.welcomePage.experimental.extensionContributions": true, aktiviert werden.

Das kurze Video unten zeigt ein Beispiel-Walkthrough, um Benutzern die Luna Paint-Erweiterung zu vermitteln.

Stepping through the Luna Paint extension's walkthrough contribution

Unterstützung für benutzerdefiniertes Hover in der Aktivitätsleiste und im Panel

In diesem Meilenstein haben wir experimentelle Unterstützung für benutzerdefinierte Hovers in der Aktivitätsleiste und im Panel hinzugefügt. Sie können benutzerdefinierte Hovers mit der Einstellung workbench.experimental.useCustomHover aktivieren.

Custom hover in Activity Bar and Panel

Thema: GitHub Light Theme Produkt-Symbolik-Thema: Fluent Icons

Remote-Repositorys (RemoteHub)

Als Teil dieser Version veröffentlichen wir eine neue integrierte Erweiterung, Remote-Repositorys (RemoteHub), mit der Sie jedes GitHub-Repository direkt von VS Code aus durchsuchen, durchsuchen, bearbeiten und committen können, ohne das Repository klonen oder lokal haben zu müssen. Sie ist derzeit nur in der Insiders-Version von VS Code verfügbar.

Erste Schritte

Um zu beginnen, führen Sie den Befehl Remote-Repository öffnen... aus der Befehlspalette aus. Von dort aus können Sie jede GitHub-URL einfügen oder nach einem bestimmten Repository oder Pull Request suchen.

Open Remote Repository picker

Thema: Amethyst Dark Theme

Sobald Sie eine URL eingeben oder ein Repository oder einen Pull Request auswählen, öffnet VS Code einen neuen Arbeitsbereich für dieses Repository. Die Remote-Statusanzeige auf der linken Seite der Statusleiste zeigt den verbundenen Remote-Anbieter-Namen, z. B. GitHub, für das Remote-Repository an.

Remote Repositories Demo showing various source control operations

Thema: Amethyst Dark Theme

Funktionen

  • Öffnen Sie sofort jedes GitHub-Repository, ohne es zu klonen oder lokal zu haben.
  • Bearbeiten und beitragen Sie einfach zu jedem GitHub-Repository – committen Sie Ihre Änderungen direkt auf GitHub oder öffnen Sie einen Pull Request.
  • In einer anderen Umgebung fortfahren – über den Befehl Fortfahren mit... (zugänglich über die Befehlspalette oder das Quick-Pick-Menü des Remote-Indikators).
    • Repository lokal klonen
    • Repository in einem Container klonen – erfordert die Dev Containers-Erweiterung
  • Bietet eine vertraute Benutzeroberfläche, ähnlich der Arbeit an einem lokalen Repository (*siehe "Einschränkungen" unten).
    • Explorer – Dateien und Ordner öffnen, kopieren, verschieben, umbenennen und löschen
    • Suchen – Schnelle Volltextsuche*
    • Quellcodeverwaltung – Ihre Änderungen stagen und committen, sowie viele andere Aktionen zur Quellcodeverwaltung
    • Zeitachsenansicht – Dateihistorie mit Diff-Unterstützung anzeigen
    • Schnell öffnen – Schnell Dateien zum Öffnen finden
    • Remote-Indikator – Zeigt den Anbieter an, mit dem das Remote-Repository verbunden ist (z. B. GitHub)
  • Gleichzeitig an verschiedenen Branches arbeiten – Jeder Remote-Branch wird wie ein separater Arbeitsbaum (im Git-Sinne) behandelt, d. h. alle von Ihnen vorgenommenen Änderungen sind auf diesen Branch beschränkt. Sie müssen Ihre Änderungen nicht stashen, nur um zu einem neuen Branch zu wechseln, um einen PR auszuchecken oder mit einem neuen Arbeitselement zu beginnen. Und wenn Sie zum vorherigen Branch zurückkehren, sind Ihre Änderungen immer noch da.
  • Installieren Sie die GitHub Pull Requests and Issues-Erweiterung und zeigen Sie schnell Pull Requests an, durchsuchen und checken Sie sie aus, und zeigen Sie Issues an und beginnen Sie mit der Arbeit an ihnen.

Einschränkungen

  • Begrenzte Sprachintelligenz – Viele Sprachserver verstehen diese virtualisierte Umgebung noch nicht. TypeScript unterstützt die Einzeldateienintelligenz für Remote-Repositorys.
  • Begrenzte Erweiterungsunterstützung – Wie bei den Sprachservern funktionieren viele Erweiterungen nicht mit Remote-Repositorys. Erweiterungen können sich abmelden und werden für virtuelle Arbeitsbereiche nicht aktiviert. Weitere Details finden Sie im Abschnitt Erweiterungsentwicklung unten.
  • Suchen – Volltextsuche erfordert einen vordefinierten Index für exakte Textübereinstimmung, andernfalls wird auf die native Standard-Branch-eigene Fuzzy-Suche von GitHub zurückgegriffen.
  • Terminals – Nicht unterstützt. Alle geöffneten Terminals befinden sich auf Ihrem lokalen Dateisystem.
  • Debugging – Nicht unterstützt.
  • Tasks – Nicht unterstützt.

Teilen Sie uns Ihre Meinung mit

Wir freuen uns sehr darauf, dass Sie Remote-Repositorys (RemoteHub) ausprobieren und sind gespannt auf Ihre Gedanken und Ihr Feedback. Wir stehen erst am Anfang dieser Reise, daher erwarten Sie, dass die Funktionen wachsen und die Einschränkungen mit fortschreitender Entwicklung abnehmen werden. Wir werden auch die Menge der unterstützten Anbieter erweitern. GitHub ist nur der erste Anbieter, den wir unterstützen, Azure Repos wird bald folgen.

TypeScript 4.3

Diese Version verbessert weiterhin unsere Unterstützung für die kommende TypeScript 4.3-Version. Sie können mehr über die neuen Sprachfunktionen und Verbesserungen in TypeScript 4.3 auf dem TypeScript-Blog lesen. Hier sind einige der Editor-Verbesserungen, die sie ermöglicht

  • Unterstützung für override. Es gibt auch Schnelle Fixes zum Hinzufügen des override-Schlüsselworts.
  • Importanweisungs-Vervollständigungen. Dies ist wie Auto-Import, nur dass Sie die Importanweisung selbst eingeben.
  • Unterstützung für JSDoc @link-Tag.

Um die TypeScript 4.3 Nightly Builds zu verwenden, installieren Sie einfach die TypeScript Nightly extension. Bitte geben Sie uns Ihr Feedback und lassen Sie uns wissen, wenn Sie auf Fehler mit TypeScript 4.3 stoßen.

Vertrauen in Arbeitsbereiche

In den Release Notes der letzten Meilenstein haben wir unsere Arbeit an Workspace Trust speziell für Erweiterungsautoren geteilt. Wir haben in diesem Meilenstein große Fortschritte sowohl bei der Erweiterungs-API als auch bei den Benutzererfahrungen gemacht. Dennoch wird Workspace Trust für diese Version deaktiviert bleiben, aber wir würden uns freuen, wenn Sie es ausprobieren und Feedback geben würden.

Sie können die Funktion mit der folgenden Einstellung security.workspace.trust.enabled aktivieren. Sobald sie aktiviert ist, sehen Sie den folgenden Dialog beim Öffnen von Ordnern in VS Code.

Workspace Trust startup dialog

Dieser Dialog ist wichtig, damit der Benutzer frühzeitig eine Entscheidung treffen und die Auswirkungen seiner Entscheidung verstehen kann. Sobald Sie die Funktion verstanden haben, möchten Sie vielleicht anpassen, wann der Dialog angezeigt werden soll, indem Sie die Einstellung security.workspace.trust.startupPrompt verwenden.

Sie können die Entwicklung von Workspace Trust verfolgen und Feedback in Issue #106488 geben.

Beiträge zu Erweiterungen

Remote-Entwicklung

Die Arbeit an den Remote Development-Erweiterungen wird fortgesetzt. Diese ermöglichen es Ihnen, einen Container, eine Remote-Maschine oder das Windows Subsystem for Linux (WSL) als voll ausgestattete Entwicklungsumgebung zu nutzen.

Funktions-Highlights in 1.56 umfassen

  • Neue Volumenansicht beim Repository in Container-Volume klonen.
  • Lokale Terminalwarnung bei Verbindung mit einem Remote-Server.
  • Aufforderung zur Installation von Docker Desktop beim Start mit der Dev Containers-Erweiterung.

Sie können sich über neue Erweiterungsfunktionen und Fehlerbehebungen in den Remote Development Release Notes informieren.

GitHub Pull Requests und Issues

Die Arbeit an der GitHub Pull Requests and Issues-Erweiterung wird fortgesetzt, die es Ihnen ermöglicht, Pull Requests und Issues zu bearbeiten, zu erstellen und zu verwalten.

Um alle neuen Funktionen und Updates kennenzulernen, können Sie das vollständige Changelog für die Version 0.26.0 der Erweiterung einsehen.

Erweiterungs-Authoring

Definieren Sie, ob Ihre Erweiterung einen virtuellen Arbeitsbereich unterstützt

Die neue Erweiterung Remote-Repositorys ermöglicht es Ihnen, einen Ordner mit Inhalten direkt von GitHub zu öffnen. Sie tut dies, indem sie ein virtuelles Dateisystem bereitstellt und einen Arbeitsbereich darauf öffnet. Andere Erweiterungen tun dasselbe. Sie liefern Inhalte von FTP-Servern, Cloud-Speichern oder Datenbanken und stellen diese nahtlos als Dateien für den Benutzer in VS Code bereit.

Das virtuelle Dateisystem-Feature existiert schon seit einiger Zeit. Wir haben jedoch festgestellt, dass nicht alle Erweiterungen in einem virtuellen Arbeitsbereich ausgeführt werden können, in dem die Arbeitsbereichsdateien nicht physisch auf der Festplatte vorhanden sind. Aus diesem Grund haben wir Unterstützung für Erweiterungen hinzugefügt, um zu signalisieren, ob sie für virtuelle Arbeitsbereiche unterstützt werden oder nicht. Wenn eine Erweiterung sich abgemeldet hat, wird sie von VS Code für einen virtuellen Arbeitsbereich nicht aktiviert und der Benutzer sieht keine Fehler von dieser Erweiterung.

Eine Erweiterung meldet sich in der package.json wie unten gezeigt von einem virtuellen Arbeitsbereich ab

{
  "capabilities": {
    "virtualWorkspaces": false
  }
}

Das Ziel ist, dass so viele Erweiterungen wie möglich die Ausführung in einem virtuellen Arbeitsbereich unterstützen. Dies ist jedoch nicht immer möglich, insbesondere wenn eine Erweiterung Komponenten verwendet, die davon ausgehen, dass Dateien physisch vorhanden sind. Die Anleitung für virtuelle Arbeitsbereiche beschreibt, wie eine Erweiterung einen virtuellen Arbeitsbereich unterstützen kann.

Aufruf zum Handeln: Bitte prüfen Sie, ob Ihre Erweiterung virtuelle Arbeitsbereiche verarbeiten kann, und setzen Sie die virtualWorkspaces-Fähigkeit entsprechend in Ihrer package.json.

Es wird eine Übergangszeit geben, bis die Erweiterungen die neue Eigenschaft virtualWorkspaces übernommen haben. Bis dahin pflegen wir eine interne Liste für Erweiterungen, bei denen wir der Meinung sind, dass die virtualWorkspaces-Fähigkeit auf false gesetzt sein sollte. Dies geschah basierend auf einer Analyse, ob die Erweiterung das Node.js fs-Modul verwendet und somit direkt auf das Dateisystem zugreift. Der Erweiterungsautor ist jedoch in einer viel besseren Position, um zu beurteilen, ob eine Erweiterung die virtualWorkspaces-Fähigkeit unterstützt. Um die Übernahme zu verfolgen, haben wir die folgende Tracking-Ausgabe #122836 erstellt. Wenn Ihre Erweiterung in der Liste steht und Sie die virtualWorkspaces-Fähigkeit übernommen haben, fügen Sie bitte einen Kommentar in die obige Ausgabe ein.

Menü für Remote-Indikator

Erweiterungen können nun zum Menü des Remote-Indikators beitragen

Remote indicator on the left of the Status bar

Der Menübeitragspunkt statusBar/remoteIndicator fügt einen Befehl zum Menü des Remote-Indikators hinzu.

"contributes": {
    "menus": {
        "statusBar/remoteIndicator": [
        {
          "command": "remote-wsl.newWindow",
          "when": "!remoteName && isWindows",
          "group": "remote_10_wsl_0_local@1"
        }
    ]},
    "commands": [
      {
        "command": "remote-wsl.newWindow",
        "title": "New WSL Window",
        "category": "Remote-WSL"
      }
    ]
}

Damit das Menü Einträge basierend auf dem Anbieter sortieren kann, muss die group einer bestimmten Syntax folgen

Für Befehle von Remotes: remote_${orderOfGroups}_${remoteName)_${internalGrouping}@${orderInGroup}

Für Befehle von virtuellen Dateisystemen: virtualfs_${orderOfGroups}_${fileScheme)_${internalGrouping}@${orderInGroup}

  • orderOfGroups ist eine zweistellige Zahl, die zum Sortieren der Gruppen verwendet wird
  • remoteName ist der erste Teil der remoteAuthority (wsl, ssh,...)
  • fileScheme ist das URI-Schema des virtuellen Dateisystems
  • internalGrouping ist zur freien Verwendung für jeden Beitrag
  • orderInGroup wird zum Sortieren von Einträgen innerhalb Ihrer Gruppe verwendet

Beispiel: remote_10_wsl_1-open@1

iframes werden nun für die meisten Webviews verwendet

Seit der Einführung der Webview-API haben wir Webviews mithilfe des webview-Tags von Electron implementiert. Im Web werden VS Code-Webviews stattdessen mithilfe von Standard-<iframe>-Elementen implementiert, da <webview> nicht verfügbar ist.

Wir haben die Migration von Desktop-Versionen von VS Code zur Verwendung von <iframe>-basierten Webviews untersucht, da diese Änderung Erweiterungen eine konsistentere Webview-Umgebung zwischen Desktop und Web bietet. Die Migration von <webview> wird auch unsere Bemühungen zur Electron-Sandboxing unterstützen.

In dieser Iteration haben wir die meisten Webviews auf die Verwendung von Iframes umgestellt. Das <webview>-Tag wird nun nur noch für Webviews verwendet, die das Find-Widget aktivieren, und wir planen, diese nach etwas mehr technischer Arbeit ebenfalls auf Iframes umzustellen.

Diese Änderung sollte keine Probleme verursachen, es gibt jedoch einige Eckfälle, in denen sich das Verhalten von <iframe>- und <webview>-Elementen unterscheidet. Testen Sie Ihre Erweiterung gründlich, um sicherzustellen, dass alles wie erwartet funktioniert.

Einfacheres Untersuchen von Webviews

Ein klarer Vorteil von <iframe>-basierten Webviews ist, dass sie nun viel einfacher zu inspizieren sind.

Wenn Sie zuvor mit Webviews gearbeitet haben, erinnern Sie sich vielleicht, dass Sie den Befehl Entwickler: Webview-Entwicklertools öffnen verwenden mussten, um den Inhalt Ihres Webviews zu inspizieren. Dies öffnete ein neues Entwicklertools-Panel nur für Ihren Webview.

Inspecting a webview in its own developer tools window

Mit <iframe>-basierten Webviews können Sie stattdessen die Standard-Entwicklertools von VS Code (Entwickler: Entwicklertools umschalten) zum Inspizieren von Webviews verwenden.

Inspect a webview in the main developer tools window

Dies macht es einfach, mehrere Webviews zu inspizieren. Die Entwicklertools werden auch nicht mehr geschlossen, wenn Ihr Webview verschwindet.

Zusätzlich werden Ausnahmen und Konsolenmeldungen, die in Webviews auftreten, nun in der Konsolend der übergeordneten Entwicklertools ausgegeben.

Exceptions from a webview printed in the main developer tools

Sie können die Entwicklertools auch verwenden, um Ausdrücke im Kontext eines Webviews auszuwerten. Nachdem Sie die Dev-Tools von VS Code mit Entwickler: Entwicklertools umschalten geöffnet haben, öffnen Sie die Konsole und wählen Sie aus dem Kontextselektor active-frame für Ihren Webview aus.

Selecting the current scope of the debug console

Insgesamt sollte die Möglichkeit, die Standard-Entwicklertools von VS Code zu verwenden, eine angenehmere Entwicklungserfahrung für Webviews bieten.

CodeActionTriggerKind

Die neue Eigenschaft triggerKind in CodeActionContext verfolgt, warum Code Actions von einem CodeActionProvider angefordert werden. Die möglichen Werte dieser Eigenschaft sind

  • Invoke - Code Actions wurden explizit angefordert, entweder mit einer Tastenkombination oder einem Befehl.
  • Automatic - Code Actions wurden ohne explizite Benutzeraktion angefordert. Dazu gehört die Anforderung von Code Actions, wenn sich der Inhalt eines Dokuments ändert.

Anbieter können triggerKind verwenden, um unterschiedliche Ergebnissätze zurückzugeben, je nachdem, wie Code Actions angefordert werden. Beispielsweise kann ein Refactoring-Code-Action-Anbieter, der automatisch ausgelöst wird, nur Refactorings für die exakte aktuelle Auswahl zurückgeben, um zu begrenzen, wie oft die Glühbirne für Code Actions angezeigt wird. Wenn jedoch Code Actions explizit angefordert werden, kann derselbe Anbieter die aktuelle Auswahl automatisch erweitern, um alle Refactorings anzuzeigen, an denen ein Benutzer an der aktuellen Stelle interessiert sein könnte.

Aktualisierte Codicons

Wir haben die folgenden neuen Symbole zu unserer Codicon-Bibliothek hinzugefügt

  • arrow-swap
  • copy
  • debug-line-by-line
  • filter-filled
  • person-add
  • terminal-bash
  • terminal-cmd
  • terminal-debian
  • terminal-linux
  • terminal-powershell
  • terminal-tmux
  • terminal-ubuntu
  • Stift

List displaying updated codicons with their names

Farben für Tastenkombinationsbeschriftungen

Tastenkombinationsbeschriftungen werden angezeigt, wenn einem Befehl eine Tastenkombination zugeordnet ist. Verwendungen der Tastenkombinationsbeschriftung umfassen (sind aber nicht beschränkt auf)

  • Die Befehlspalette
  • Der Editor für Tastenkombinationen
  • Das Modalfenster zur Aufnahme von Tastenkombinationen
  • Der Abschnitt "Featurebeitrag" auf der Marktplatzseite einer Erweiterung

Die folgenden Anpassungen sind verfügbar

  • keybindingLabel.background: Hintergrundfarbe der Tastenkombinationsbeschriftung. Die Tastenkombinationsbeschriftung wird verwendet, um eine Tastenkombination darzustellen.
  • keybindingLabel.foreground: Vordergrundfarbe der Tastenkombinationsbeschriftung. Die Tastenkombinationsbeschriftung wird verwendet, um eine Tastenkombination darzustellen.
  • keybindingLabel.border: Randfarbe der Tastenkombinationsbeschriftung. Die Tastenkombinationsbeschriftung wird verwendet, um eine Tastenkombination darzustellen.
  • keybindingLabel.bottomBorder: Untere Randfarbe der Tastenkombinationsbeschriftung. Die Tastenkombinationsbeschriftung wird verwendet, um eine Tastenkombination darzustellen.

Workspace Trust Extension API

Im letzten Meilenstein haben wir die Arbeit an einem Feature namens Workspace Trust erwähnt. Wir haben die Erweiterungsautoren gebeten, Issue #120251 auf Updates zu beobachten, und tun dies weiterhin. Die folgenden Informationen und Updates finden Sie ebenfalls in diesem Issue.

In diesem Meilenstein haben wir die Workspace Trust Extension API von "proposed" auf "stable" verschoben. Dies ermöglichte uns die Veröffentlichung des ersten Teils unseres Leitfadens für die Integration Ihrer Erweiterung in Workspace Trust. Die API ist klein, hier ist ein kurzer Überblick.

Sie können Ihre Erweiterung so deklarieren, dass sie in nicht vertrauenswürdigen Arbeitsbereichen eine vollständige, teilweise oder keine Unterstützung bietet, indem Sie die Fähigkeit untrustedWorkspaces in package.json verwenden.

Das folgende Beispiel deklariert, dass die Erweiterung in nicht vertrauenswürdigen Arbeitsbereichen vollständig unterstützt wird. In diesem Fall ist die Erweiterung in nicht vertrauenswürdigen Arbeitsbereichen aktiviert.

"capabilities": {
  "untrustedWorkspaces": {
    "supported": true
  }
}

Das nächste Beispiel deklariert, dass die Erweiterung in nicht vertrauenswürdigen Arbeitsbereichen nicht unterstützt wird. In diesem Fall ist die Erweiterung in nicht vertrauenswürdigen Arbeitsbereichen deaktiviert.

"capabilities": {
  "untrustedWorkspaces": {
    "supported": false
  }
}

Die dritte Option ist die Deklaration von limited Unterstützung. Es gibt drei Werkzeuge, die Ihnen zur Verfügung stehen, wenn Sie die Option limited wählen.

Erstens, wenn Sie eine Einstellung haben, die im Arbeitsbereich konfiguriert werden kann, aber einen vertrauenswürdigen Arbeitsbereich erfordert, um den Wert des Arbeitsbereichs anzuwenden, dann können Sie die Einstellung über die Eigenschaft restrictedConfigurations im Objekt untrustedWorkspaces einbeziehen. Wenn Sie dies tun, wird VS Code den Arbeitsbereichswert dieser eingeschränkten Einstellungen ignorieren, wenn Ihre Erweiterung diese Einstellungswerte über die VS Code Workspace Configuration API liest.

Das folgende Beispiel deklariert die Einstellungen, die in nicht vertrauenswürdigen Arbeitsbereichen eingeschränkt sind.

"capabilities": {
  "untrustedWorkspaces": {
    "supported": "limited",
    "restrictedConfigurations": [
      "markdown.styles"
    ]
  }
}

Als Nächstes können Sie auch programmatisch prüfen und abhören, ob der aktuelle Arbeitsbereich vertrauenswürdig ist oder nicht, indem Sie die folgende API verwenden.

export namespace workspace {
  /**
   * When true, the user has explicitly trusted the contents of the workspace.
   */
  export const isTrusted: boolean;
  /**
   * Event that fires when the current workspace has been trusted.
   */
  export const onDidGrantWorkspaceTrust: Event<void>;
}

Zuletzt können Sie Befehle oder Ansichten deklarativ mit dem Kontextschlüssel isWorkspaceTrusted in Ihren "when"-Klauseln ausblenden.

Handlungsaufforderung: Bitte überprüfen Sie den "Workspace Trust Extension Guide" in Issue #120251 und legen Sie den Wert untrustedWorkspaces.supported für Ihre Erweiterung entsprechend fest.

Vorgeschlagene Erweiterungs-APIs

Jeder Meilenstein bringt neue vorgeschlagene APIs mit sich und Erweiterungsautoren können sie ausprobieren. Wie immer wünschen wir uns Ihr Feedback. Hier erfahren Sie, wie Sie eine vorgeschlagene API ausprobieren können

  • Sie müssen Insiders verwenden, da sich vorgeschlagene APIs häufig ändern.
  • Sie müssen diese Zeile in der Datei package.json Ihrer Erweiterung haben: "enableProposedApi": true.
  • Kopieren Sie die neueste Version der Datei vscode.proposed.d.ts in den Quellcode-Speicherort Ihres Projekts.

Sie können keine Erweiterung veröffentlichen, die eine vorgeschlagene API verwendet. Es kann zu Breaking Changes in der nächsten Version kommen und wir möchten niemals bestehende Erweiterungen beeinträchtigen.

Native Notebooks

Wir bereiten große Teile der nativen Notebook-API zur Finalisierung vor. Wir haben zahlreiche kleine Anpassungen und auch einige größere Änderungen vorgenommen.

Notebook-Serialisierer

Wir haben die NotebookSerializer API hinzugefügt. Sie bietet eine vereinfachte Möglichkeit, "Bytes" in NotebookData zu übersetzen und umgekehrt. Wenn Sie diese API implementieren, erhält Ihr Notebook kostenlos Features wie Sicherung, Wiederherstellung, Änderungsstatus und andere. Wir empfehlen Erweiterungsautoren, diese neue API zu übernehmen und nicht die vorherige, auf Inhaltsanbietern basierende API zu verwenden.

Notebook-Controller

Die Notebook-Controller-API ersetzt die Kernel-Provider-API. Notebook-Controller stellen die Ausführungs-Engine Ihres Notebooks bereit, die die Notebook-Ausgabe erzeugt. Notebooks können mehrere Controller oder keine bereitstellen, und VS Code ermöglicht es Benutzern, Controller auszuwählen. Im Gegenzug steht es Erweiterungen frei, Controller zu erstellen, zu ändern und zu entfernen, je nach ihrem Domänenmodell.

Notebook-Zellen-Statusleiste

Die NotebookCellStatusBarItemProvider API ersetzt die Methode createCellStatusBarItem. Sie ermöglicht es Erweiterungen, Elemente mit Beschriftungen, Symbolen und Befehlen zur Statusleiste am unteren Rand jedes Zellen-Editors beizutragen. Sie folgt demselben Anbieter-Muster wie viele andere VS Code-Erweiterungs-APIs.

Testen

Wir hatten vor, diesen Monat einen Teil der neuen Test-APIs zu finalisieren, haben uns jedoch auf die Verfeinerung konzentriert und die Finalisierung auf nächsten Monat verschoben, verfolgt in Issue #122208. Die in dieser Iteration vorgenommenen API-Änderungen waren hauptsächlich

  • Der TestProvider wurde in TestController umbenannt und seine Methoden entsprechend.
  • Die TestItems sind jetzt verwaltete Objekte, die von vscode.test.createTestItem aufgerufen werden.
  • Testergebnisse werden jetzt über eine standardmäßige vscode.test.createTestResults Methode erstellt, die innerhalb oder außerhalb von TestController.runTests aufgerufen werden kann.

Mit diesen Änderungen kamen einige zusätzliche Features, wie die Möglichkeit, rohe Testergebnisse anzuzeigen und Erweiterungen Fehler beim Laden von Tests anzuzeigen. Wir glauben, dass diese Änderungen eine solide Grundlage für zusätzliche zukünftige Funktionen bieten und unseren bestehenden Erweiterungs-APIs besser entsprechen.

Wir haben auch eine Test Adapter Converter-Erweiterung erstellt, die es jedem Adapter, der mit der bestehenden Test Explorer UI-Erweiterung arbeitet, ermöglicht, sich automatisch in native VS Code-Tests zu integrieren. Die Converter-Erweiterung kann heute manuell installiert werden, und bald wird sie in die Test Explorer UI integriert, um einen nahtlosen Migrationspfad für bestehende Benutzer und Adapter in native Tests zu ermöglichen.

Verbesserter Transfer von ArrayBuffers zu und von Webviews

In aktuellen Versionen von VS Code gibt es beim Senden von Typed Arrays zu oder von einem Webview einige Eigenheiten.

  • Typed Arrays, wie z.B. UInt8Array, werden sehr ineffizient serialisiert. Dies kann zu Leistungsproblemen führen, wenn viele Megabyte an Daten übertragen werden müssen.
  • Gesendete Typed Arrays werden auf der Empfängerseite nicht als der richtige Typ wiederhergestellt. Wenn Sie ein UInt8Array senden, erhält der Empfänger stattdessen ein generisches Objekt, das die Datenwerte des UInt8Array enthält.

Obwohl beides Bugs sind, können wir sie nicht beheben, ohne möglicherweise Erweiterungen zu brechen, die sich auf das bestehende Verhalten verlassen. Gleichzeitig gibt es keinen Grund, warum eine neu geschriebene Erweiterung das derzeit verwirrende und ineffiziente Verhalten wünschen würde.

Daher haben wir uns entschieden, das bestehende Verhalten für bestehende Erweiterungen beizubehalten, aber neue Erweiterungen für das korrektere Verhalten zu optieren. Dies geschieht durch die Betrachtung der engines in der package.json Ihrer Erweiterung.

"engines": {
  "vscode": "^1.57.0",
}

Wenn die Erweiterung VS Code 1.57+ anvisiert, sollten Typed Arrays auf der Empfängerseite wiederhergestellt werden und der Transfer großer Typed Arrays zu und von Webviews wesentlich effizienter sein.

Bitte testen Sie dieses Verhalten und lassen Sie uns wissen, ob es nicht wie erwartet funktioniert oder unerwartete Regressionen für Ihren bestehenden Code verursacht.

TerminalOptions.message

Dieser neue Vorschlag ermöglicht es einer Erweiterung, eine Nachricht im Terminal anzuzeigen, bevor der Prozess gestartet wird.

vscode.window.createTerminal({
  message: '\x1b[3;1mSome custom message\x1b[0m'
});

Debug Adapter Protocol

Ausnahme-Haltepunkte sind besser auf reguläre Haltepunkte abgestimmt

Die Anforderung setExceptionBreakpoints kann nun optional ein Array von Breakpoints zurückgeben, ähnlich wie andere set*Breakpoints-Anforderungen. Dies ermöglicht es Clients, Validierungsfehlermeldungen für einzelne Ausnahme-Haltepunkte oder Filter anzuzeigen. Ab dieser Version zeigt VS Code diese Fehler in der Ansicht "Haltepunkte" an.

Die Anforderung "Neustart" kann nun Änderungen an der Debug-Konfiguration übernehmen

Die Anforderung restart nimmt nun einen neuen optionalen Parameter arguments entgegen, über den Clients die neueste Version einer Start- oder Attach-Konfiguration übergeben können. Mit dieser Ergänzung kann ein Debug-Adapter die Sitzung mit aktuellen Werten aus der Debug-Konfiguration neu starten.

Debugger trennen und Debug-Ziel angehalten lassen

Die Anforderung disconnect wird verwendet, um eine Debug-Sitzung zu beenden und entweder die Ausführung des Debug-Ziels fortzusetzen oder es zu beenden. Es gibt eine neue Option, das Debug-Ziel im angehaltenen Zustand zu belassen, nachdem der Debugger getrennt wurde. Dies ermöglicht es, das Debugging mit einer neuen Sitzung fortzusetzen.

Ein Debug-Adapter, der dieses Feature implementiert, muss seine Unterstützung mit der Fähigkeit supportSuspendDebuggee ankündigen. Ein Client kann das Feature nutzen, indem er ein neues optionales Argument suspendDebuggee an die Anforderung disconnect übergibt.

Technik

Aktualisierung auf Electron 12

In diesem Meilenstein haben wir die Untersuchung zur Bündelung von Electron 12 in VS Code abgeschlossen, dank aller, die an Tests und Self-Hosting auf Insiders beteiligt waren. Dies ist eine Hauptversion von Electron und kommt mit Chromium 89.0.4389.114 und Node.js 14.16.0.

Fortschritte beim Electron-Sandbox

In diesem Meilenstein haben wir das VS Code-Fenster weiterhin für die Aktivierung der Funktionen Sandbox und Kontextisolierung von Electron vorbereitet.

Insbesondere

  • Wir haben alle Umgebungs-Eigenschaften, die für ein VS Code-Fenster benötigt werden, so angepasst, dass sie in einem sandboxed Renderer zugänglich sind.
  • Wir untersuchen die Umstellung auf iframe-Elemente anstelle von webview für benutzerdefinierte Editoren, indem wir iframe selektiv in bestimmten Fällen aktivieren, wo immer möglich.
  • Wir konnten einige der nativen Modul- oder Node.js-Anforderungen, die wir im Renderer haben, in andere Prozesse verschieben oder ganz entfernen.
  • Wir haben windows-process-tree kontextsensitiv gemacht.

Service Worker werden nun zum Laden von Ressourcen in Webviews verwendet

In Desktop-VS Code verwenden Webviews nun Service Worker, um lokale Ressourcen zu laden. Web-Versionen von VS Code haben immer Service Worker für diesen Zweck verwendet, aber zuvor hat Desktop-VS Code ein Electron-Protokoll verwendet.

Die Verwendung von Service Workern in der Desktop-Version ermöglicht uns eine bessere Abstimmung des Verhaltens von Webviews zwischen Desktop und Web. Außerdem konnten wir einige knifflige Fehler beheben und etwa 1000 Zeilen Code löschen.

Obwohl diese Änderung für die Mehrheit der Webview-Erweiterungen keine Auswirkungen haben sollte, könnte sie in einigen Randfällen Probleme verursachen.

  • Erweiterungen, die Annahmen darüber treffen, wie Webviews Ressourcen laden.

    Wenn Ihre Erweiterung das vscode-webview-resource:-Protokoll direkt verwendet oder andere Annahmen über Ressourcen-URIs hart codiert hat, funktioniert sie möglicherweise nicht mehr.

    Stellen Sie stattdessen sicher, dass Sie immer .asWebviewUri verwenden, um URIs für Ressourcen zu erstellen. Denken Sie auch daran, dass sich das Format der zurückgegebenen URI in Zukunft ändern kann.

  • Erweiterungen, die src eines iframes auf eine HTML-Datei auf der Festplatte setzen.

    Service Worker können diese Anfrage nicht sehen, daher unterstützen wir dies nicht mehr. Dies war im Web bereits der Fall, und wir glauben nicht, dass dieses Muster häufig vorkommt.

    Die empfohlene Lösung ist, keinen iframe zu verwenden und den Inhalt der HTML-Datei stattdessen in den Webview einzubetten.

Kein implizites Überschreiben im Code aktiviert

Die kommende TypeScript 4.3-Version bringt das neue Schlüsselwort override, das dem Compiler mitteilt, dass eine Methode in einer Unterklasse eine Methode in ihrer Oberklasse überschreibt. Es gibt auch ein neues Flag --noImplicitOverride, das erzwingt, dass alle Methoden, die eine Methode einer Oberklasse überschreiben, das Schlüsselwort override verwenden müssen.

class Foo {
   foo() {...}
}

class SubFoo extends Foo {
    foo() { ... } // Error when noImplicitOverride is enabled: missing override specifier
}

Das override-Schlüsselwort hat einige Vorteile.

  • Beim Lesen von Code informiert es Sie, dass eine Methode eine aus der Basisklasse überschreibt.

  • Es ist ein Fehler, zu versuchen, eine Methode zu überschreiben, die nicht in der Basisklasse vorhanden ist. Dies kann helfen, Fehler abzufangen, die durch die Umbenennung einer Methode in einer Basisklasse, aber das Vergessen, den Methodennamen in den Unterklassen zu aktualisieren, verursacht werden.

In dieser Iteration haben wir das override-Schlüsselwort in unseren Codebestand übernommen und --noImplicitOverride sowohl für den Kern-VS Code als auch für alle integrierten Erweiterungen aktiviert. Obwohl wir den Großteil dieser Arbeit automatisiert haben, hat uns die Änderung geholfen, einige Fälle aufzudecken, in denen unser Code versehentlich eine Eigenschaft neu deklariert hatte oder unklare Vererbungsmuster aufwies.

Diese neue strenge Regel sollte uns auch helfen, einige häufige Programmierfehler in Zukunft aufzudecken.

Windows-Installer in Windows Package Manager konsolidiert

Wir haben unsere Windows Package Manager-Veröffentlichungspipeline aktualisiert, um unsere Benutzer- und Systeminstaller für arm64 zu veröffentlichen und das v1-Paket-Manifestschema zu übernehmen, was es uns ermöglicht, die Benutzer- und Systeminstaller für x86, x64 und arm64 in einem einzigen Manifest zu konsolidieren. Benutzer können zwischen den Benutzer- und Systeminstallern wählen, indem sie den Parameter --scope beim Installieren eines Pakets oder die winget CLI-Einstellungen verwenden.

Dokumentation

Aktualisierte Einführungsvideos

Die Einführungsvideos von VS Code wurden aktualisiert. Die Videos reichen von Erste Schritte und Verwendung von Erweiterungen bis hin zu VS Code-Funktionen wie Debugging und Versionskontrolle.

Intro to Debugging in VS Code video

Neue C++-Videos

Das Team der C++-Erweiterung hat eine Reihe von Einführungsvideos erstellt, die erklären, wie Sie IntelliSense konfigurieren, Ihre C++-Projekte erstellen und debuggen.

Die Geschichte und Technologie hinter VS Code

Sie können die Geschichte und die zugrunde liegende Technologie von VS Code in diesem Interview mit dem VS Code-Ingenieur Ben Pasero lesen. Ben spricht über die frühen Tage von VS Code und wie es ist, Electron als Anwendungsframework zu nutzen, das es VS Code ermöglicht, unter macOS, Windows und Linux zu laufen.

Partnererweiterungen

Azure Machine Learning

Die Azure Machine Learning-Erweiterung ermöglicht es Ihnen, leistungsstarke Cloud-Computing-Ressourcen für Ihre Machine-Learning-Workflows zu erstellen und zu verwalten. Mit ihren Remote-Funktionen können Sie sich nahtlos mit Ihren Compute-Ressourcen verbinden, sicher, auditierbar und konform.

Microsoft Azure Machine Learning extension

Bemerkenswerte Fehlerbehebungen

  • 108559: RunInTerminal verwendet nicht das angegebene integrierte Terminal aus den Workspace-Einstellungen Fehler
  • 118282: Debugger-Schritt über skipFiles hinaus
  • 118731: Untersuchen, wie Safari's Popup-Blocker bei asynchroner Öffnung von Browserfenstern und -tabs vermieden werden kann.
  • 119340: Ohne Debuggen ausführen wird nie beendet, wenn der Haltepunkt für unbehandelte Ausnahmen aktiviert ist
  • 121347: Datei erhält verfälschte Zeichen, wenn sie aus dem Backup wiederhergestellt wird
  • 119059: Benutzerdefinierte Texteditoren: Backups öffnen 2 Editoren beim Wiederherstellen
  • 120245: CSS: !important-Vervollständigung ist kaputt
  • 120393: Verbesserung der Handhabung von WebGL-Kontextverlust
  • 120435: Überprüfung des Pfads emmet.extensionsPath entfernen
  • 120882: Einfügen einer Datei im Explorer öffnet diese Datei nicht mehr im Editor
  • 121148: Doppelte Startkonfigurationen werden im Debug-Dropdown angezeigt
  • 120277: Die horizontale Scrollleiste im Bereich "In Dateien suchen" ist zu klein und scrollt in die falsche Richtung

Vielen Dank

Last but certainly not least, ein großes Danke an die folgenden Personen, die diesen Monat zu VS Code beigetragen haben

Beiträge zu unserer Fehlerverfolgung

Beiträge zu vscode

Beiträge zu vscode-eslint

Beiträge zu vscode-json-languageservice

Beiträge zu vscode-vsce

Beiträge zu debug-adapter-protocol

Beiträge zu vscode-js-debug

Beiträge zu vscode-generator-code

© . This site is unofficial and not affiliated with Microsoft.