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

November 2018 (Version 1.30)

Update 1.30.2: Das Update behebt diese Probleme.

Update 1.30.1: Das Update behebt diese Probleme.

Downloads: Windows: x64 | Mac: Intel | Linux 64-bit: deb rpm tarball | 32-bit: deb rpm tarball


Willkommen zur November 2018-Version von Visual Studio Code. Es gibt eine Reihe wichtiger Updates in dieser Version, die Ihnen hoffentlich gefallen werden. Einige der wichtigsten Highlights sind:

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

Die Release Notes sind in die folgenden Abschnitte unterteilt, die sich auf die Fokusbereiche von VS Code beziehen. Hier sind einige weitere Updates:

  • Workbench - Menü-Scrolling und verbesserte Überlaufbehandlung, ein Klick zum Öffnen von settings.json.
  • Sprachen - JS/TS-Umbenennungen verarbeiten jetzt Destrukturierung, fügen fehlende "new"-Quick-Fix-Option hinzu.
  • Debugging - Debugging-Konsolen löschen, direkt aus dem VS Code Process Explorer debuggen.
  • Aufgaben - Task-Terminal löschen, Benutzereingabe für Task-Variablen, letzte Task-Befehl erneut ausführen.
  • Erweiterungsentwicklung - Unterstützung für "Go to Declaration", neuer Kontext für Signature Help.

Insiders: Möchten Sie neue Funktionen so schnell wie möglich sehen? Sie können die nächtliche Insiders-Build herunterladen und die neuesten Updates ausprobieren, sobald sie verfügbar sind. Und für die neuesten Nachrichten, Updates und Inhalte zu Visual Studio Code folgen Sie uns auf Twitter @code!

Workbench

Mehrzeilige Sucheingabe

Letzten Monat haben wir Unterstützung für mehrzeilige Suche hinzugefügt. Diesen Monat haben wir die Such-UX verbessert, um sie einfacher nutzbar zu machen. Jetzt können Sie mit mehrzeiligem Text suchen, ohne einen regulären Ausdruck schreiben zu müssen. Geben Sie Shift+Enter in das Suchfeld ein, um einen Zeilenumbruch einzufügen, und das Suchfeld wird erweitert, um Ihre vollständige mehrzeilige Abfrage anzuzeigen. Sie können auch eine mehrzeilige Auswahl aus dem Editor kopieren und in das Suchfeld einfügen.

multiline search input

Benutzerdefinierte Titelleiste und Menüleiste unter Linux standardmäßig

Über mehrere Versionen hinweg haben wir die Barrierefreiheit und Thematisierung von Menüs unter Windows über die benutzerdefinierte Titelleiste und Menüleiste verbessert. Obwohl sie unter Linux optional verfügbar war, wird sie in dieser Version nun standardmäßig aktiviert.

Custom title and menu bar on Linux

Um die native Titelleiste zu verwenden, können Sie window.titleBarStyle auf native setzen.

Scrollbare Menüs

Mit der aktivierten benutzerdefinierten Menüleiste sind Menüs auf die Darstellung innerhalb des VS Code-Fensters beschränkt. Zuvor konnten Menüs durch die Fenstergrenzen abgeschnitten werden. Dies wurde nun behoben, indem Kontextmenüs bei Bedarf scrollbar gemacht wurden.

Scrolling menus

Überlaufmenü der Menüleiste

Die Menüleiste hat auch ein neues Überlaufmenü (...), wenn Ihre Fensterbreite nicht ausreicht, um sowohl die Menüleiste als auch den Fenstertitel aufzunehmen.

Menu bar overflow

Aktionen des Einstellungen-Editors verschoben

Die Aktionen des Einstellungen-Editors (Einstellungen.json öffnen, Geänderte Einstellungen anzeigen usw.) wurden aus dem Menü ... innerhalb des Einstellungen-Editors in die Titelleiste des Editors verschoben. Dies macht sie konsistent mit anderen Editortypen, und Einstellungen.json öffnen ist nun nur noch einen Klick entfernt mit der Schaltfläche mit den geschweiften Klammern {}. Der Editor für Tastenkombinationen hat die gleiche Änderung vorgenommen.

settings editor actions

Referenzansicht

Die Referenzansicht wurde überarbeitet und ist keine Vorschau-Funktion mehr. Es gibt nun zwei Befehle:

  • Alle Referenzen finden, der die Referenzansicht öffnet.
  • Referenzen anzeigen, der Referenzen in einer Vorschauansicht öffnet.

Die Referenzansicht ist beim Start ausgeblendet, bleibt aber sichtbar, sobald sie verwendet wurde. Wenn alle Suchergebnisse gelöscht sind, zeigt sie einen Verlauf früherer Suchen an.

References View

Es gibt jetzt eine Zusammenfassung der Ergebnisse am oberen Rand der Ansicht und ein Kontextmenü zum Löschen und Kopieren von Ergebnissen. Viele Fehler wurden behoben und die Gesamtstabilität wurde verbessert.

Editor

Snippet-Kommentarvariablen

Es gibt neue Snippet-Variablen, die Zeilen- oder Blockkommentare einfügen und die aktuelle Sprache berücksichtigen. Verwenden Sie BLOCK_COMMENT_START und BLOCK_COMMENT_END für Blockkommentare und LINE_COMMENT ansonsten.

Das folgende Snippet fügt /* Hello World */ in JavaScript-Dateien und <!-- Hello World --> in HTML-Dateien ein.

{
  "hello": {
    "scope": "javascript,html",
    "prefix": "hello",
    "body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
  }
}

Deklaration versus Definition

Bisher bot VS Code Befehle zum Anzeigen der Definition eines Symbols, z. B. Gehe zur Definition und Definition anzeigen. Dies berücksichtigte nicht die Tatsache, dass einige Sprachen strikter als andere zwischen der Deklaration und der Definition eines Symbols unterscheiden. Wir haben dies behoben, und es gibt nun die Befehle Gehe zur Deklaration und Deklaration anzeigen für die Deklaration eines Symbols.

Go to Declaration

Die für Sprachfunktionen wie Gehe zur Deklaration benötigten Daten werden von Erweiterungen berechnet, und es gibt eine neue API, über die Sie im Abschnitt Erweiterungsentwicklung lesen können.

Sanfte Cursor-Animation

Es gibt eine neue Einstellung, editor.cursorSmoothCaretAnimation, die eine Übergangsanimation aktiviert, wenn der Cursor bewegt wird.

Git-Integration

Standard-Klickaktion ändern

Sie können jetzt die Standardaktion ändern, wenn Sie in der Quellcodeverwaltungsansicht auf eine Datei klicken. Standardmäßig öffnet VS Code die Diff-Ansicht, aber durch Setzen von git.openDiffOnClick auf false wird die Datei in einem normalen Editor geöffnet.

Push oder Sync nach Commit

Eine neue Einstellung git.postCommitCommand ermöglicht es Ihnen, Ihr Repository nach einem Commit zu pushen oder zu synchronisieren. Die verfügbaren Werte sind none (Standard), push und sync.

Sprachen

TypeScript 3.2

VS Code enthält jetzt TypeScript 3.2.2. Diese Version bringt einige aufregende neue Sprachfunktionen, darunter strikte Typisierung für bind, call und apply und BigInt-Unterstützung. Das TypeScript-Update behebt auch einige wichtige Fehler und enthält neue Tooling-Funktionen und Verbesserungen.

Verbesserte Anzeige von JavaScript- und TypeScript-Callbacks

JavaScript- und TypeScript-anonyme Callbacks wurden im Outline-View, Breadcrumbs-View und der Dokumentensymbolliste alle als <function> bezeichnet. Dies machte es unmöglich zu erkennen, nach welcher Funktion Sie wirklich gesucht haben.

VS Code 1.29 with  entries in the Outline view

Mit TypeScript 3.2+ zeigt VS Code mehr Kontext für Callback-Funktionen an, sodass Sie sie unterscheiden können.

VS Code 1.30 with much more helpful labels

Umbenennungen verarbeiten JS/TS-Destrukturierung korrekt

Umbenennungen verarbeiten jetzt JavaScript- und TypeScript-Destrukturierung und führen bei Bedarf einen Alias ein.

Rename with destructuring

Hinzufügen einer fehlenden new JS/TS Quick Fix

Vergessen Sie new beim Instanziieren einer Klasse? TypeScript 3.2 bietet eine neue Quick Fix-Option, die Ihnen hilft.

The add missing 'new' quick fix

Diese Quick Fix funktioniert in TypeScript und in typgeprüftem JavaScript.

Dateisymbole für JS/TS-Pfadvorschläge

Aufbauend auf der Arbeit in VS Code 1.29 zeigt das IntelliSense-Widget jetzt Dateisymbole für JavaScript- und TypeScript-Pfadvorschläge an.

Icons in path IntelliSense

Hervorhebung von Markdown-Elementen in JSDoc-Kommentaren

Eingefasste Codeblöcke und andere Markdown-Elemente in JSDoc-Blöcken werden jetzt syntaktisch hervorgehoben.

JSDoc Syntax highlighting

Diese Inline-Hervorhebung entspricht besser der Markdown-Darstellung von JSDoc in VS Code für Hovers und IntelliSense-Dokumentation.

Debugging

Vereinfachte anfängliche Debug-Konfiguration

In diesem Meilenstein haben wir uns mit der Vereinfachung der generierten launch.json-Datei für unsere beliebtesten Debug-Erweiterungen beschäftigt. Unser Ziel war es, es den Benutzern zu erleichtern, mit dem Debugging zu beginnen und es zu konfigurieren. Dies bedeutete, unnötige Startkonfigurationsattribute auszublenden und die Quick Pick UI für eine bessere Benutzerinteraktion bei der Generierung der anfänglichen launch.json zu verwenden. Weitere Details zu dieser Anstrengung finden Sie in Issue #62851.

Debug-Konsolen können gelöscht werden

Seit dem letzten Meilenstein zeigen wir beim Debuggen mehrerer Debug-Sitzungen mehrere Debug-Konsolen an, eine für jede Sitzung. Jetzt ist es möglich, diese Konsolen zu löschen, wenn die entsprechende Sitzung nicht mehr aktiv ist, indem der Inhalt dieser Debug-Konsole gelöscht wird. Wir haben keine expliziten Befehle zur Verwaltung des Lebenszyklus einer Debug-Konsole hinzugefügt, da wir glauben, dass der aktuelle Ansatz intuitiver und einfacher zu bedienen ist.

Verbesserte Benutzereingabevariablen für Debug-Konfigurationen

Wir haben das Konzept von launch.json-Variablen, die zur Benutzereingabe auffordern, verbessert und verallgemeinert. Die Details finden Sie im Abschnitt Aufgaben.

Debugging aus dem Process Explorer

Es ist jetzt möglich, Node.js-Prozesse aus dem VS Code Process Explorer (Entwickler: Process Explorer öffnen) über die Kontextmenüaktion Debuggen zu starten.

Unten sehen Sie das Anhängen an einen Node.js-Prozess, der aus dem integrierten Terminal gestartet wurde.

debugging a Node.js process started from the terminal

Node/Chrome-Debugging

smartStep jetzt standardmäßig aktiviert

Vor einigen Versionen haben wir das Verhalten von smartStep geändert, um es nützlicher zu machen. Die Verwendung von smartStep führt zu einer viel besseren Debugging-Erfahrung, insbesondere für TypeScript, daher haben wir das Verhalten so geändert, dass es immer eingeschaltet ist.

Automatischer Standardwert für localRoot

In Node.js-Fern-Debugging-Szenarien ist das Attribut der Debug-Konfiguration localRoot jetzt standardmäßig auf ${workspaceFolder} gesetzt, und nur remoteRoot muss angegeben werden.

Aufgaben

Ausführen bei Ordneröffnung

Wenn Sie eine Aufgabe haben, die Sie immer beim Öffnen eines Ordners ausführen, können Sie sie so konfigurieren, dass sie automatisch ausgeführt wird, wenn dieser Ordner geöffnet wird, indem Sie ihre "runOn"-Eigenschaft konfigurieren. Wir fanden dies nützlich, um sicherzustellen, dass niemand unsere neuen strikten Nullprüfungen im VS Code-Repository bricht. Durch Hinzufügen von "runOn": "folderOpen" erhalten alle, die das automatische Ausführen von Aufgaben zulassen, Markierungen, wenn sie gegen die strikte Nullprüfung verstoßen.

{
  "type": "npm",
  "script": "strict-null-check-watch",
  "label": "TS - Strict Null Checks",
  "isBackground": true,
  "problemMatcher": {
    "base": "$tsc-watch",
    "owner": "typescript-strict-null",
    "applyTo": "allDocuments"
  },
  "runOptions": {
    "runOn": "folderOpen"
  }
}

Task-Terminal löschen

Um das Terminal vor der Ausführung einer Aufgabe zu löschen, können Sie die presentation-Optionen der Aufgabe mit "clear": true konfigurieren.

{
  "type": "gulp",
  "task": "tslint",
  "label": "Run tslint",
  "presentation": {
    "clear": true
  }
}

Aufgaben erneut ausführen

Aufgaben können jetzt mit dem Befehl Aufgaben: Letzte Aufgabe erneut ausführen (workbench.action.tasks.reRunTask) erneut ausgeführt werden. Standardmäßig wird eine neu ausgeführte Aufgabe ihre Ausführungsvariablen neu bewerten, einschließlich ihrer Eingaben. Um die bereits in der vorherigen Ausführung ausgewerteten Variablen zu verwenden, konfigurieren Sie die Option "reevaluateOnRerun".

{
  "type": "gulp",
  "task": "tslint",
  "label": "Run tslint",
  "runOptions": {
    "reevaluateOnRerun": false
  }
}

Verbesserte Benutzereingabevariablen für Aufgaben- und Debug-Konfigurationen

Schon lange unterstützt VS Code Variablenersetzung in tasks.json und launch.json über die ${variableName}-Syntax.

Für launch.json war es sogar möglich, Variablen zu verwenden, die zur Benutzereingabe auffordern (z. B. ${command:pickNodeProcess}, das einen Prozessauswähler basierend auf Quick Pick öffnet). Diese Funktion war für tasks.json nicht verfügbar und die Befehls-basierten Variablen hatten auch andere Einschränkungen (siehe Issues #9297, #9544 und #30588).

In diesem Meilenstein wurden Benutzereingabevariablen verallgemeinert und verbessert und sind jetzt für launch.json und tasks.json verfügbar. Diese Arbeit hat auch die Befehlssyntax nach tasks.json gebracht.

Für Benutzereingabevariablen haben wir eine neue Variablengruppe input eingeführt, die zu dieser Syntax führt: ${input:variableName}. Diese einfache Syntax reicht nicht aus, um dem Benutzer eine aussagekräftige Benutzeroberfläche zu präsentieren. Daher haben wir einen neuen Abschnitt inputs in launch.json und tasks.json eingeführt, in dem zusätzliche Konfigurationsattribute angegeben werden.

Beispiel mit Angular CLI

Tasks input

Hier ist die Liste der unterstützten Attribute:

  • id - Der entsprechende Variablenname, für den diese Attribute verwendet werden.
  • type - Der Typ des Benutzereingabe-Widgets. In dieser Version werden promptString (für ein String-InputBox) und pickString (für einen String Quick Pick) unterstützt.
  • description - Beschreibender Text, der dem Benutzer angezeigt wird.
  • default - Der Standardwert, der verwendet wird, wenn der Benutzer nur Enter drückt.

Ein erstes Beispiel zeigt, wie eine Benutzereingabevariable in einer Aufgabenkonfiguration (tasks.json) verwendet wird.

{
  "tasks": [
    {
      "label": "Echo input",
      "type": "shell",
      "command": "echo ${input:echoPrompt}"
    }
  ],
  "inputs": [
    {
      "id": "echoPrompt",
      "description": "Please enter a value",
      "default": "default echo text",
      "type": "promptString"
    }
  ]
}

Ein weiteres Beispiel zeigt eine Benutzereingabevariable zur Auswahl zwischen zwei Optionen in einer Debug-Konfiguration (launch.json).

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/${input:pickProgram}"
    }
  ],
  "inputs": [
    {
      "id": "pickProgram",
      "description": "Select client or server",
      "type": "pickString",
      "options": ["client.js", "server.js"],
      "default": "client.js"
    }
  ]
}

Wir planen, Benutzereingabevariablen mit den vorhandenen Befehls-basierten Variablen zu kombinieren, damit Benutzereingabevariablen von Erweiterungen bereitgestellt werden können.

Erweiterungen

Frühere Versionen installieren

Sie können jetzt zu einer früheren Version einer Erweiterung zurückkehren, wenn es Probleme mit der aktuellen Version gibt. VS Code bietet eine Aktion Weitere Version installieren für eine installierte Erweiterung, die eine Dropdown-Liste mit verfügbaren Versionen anzeigt.

Downgrade Extension

Nicht reagierender Erweiterungs-Host

VS Code führt Erweiterungen in einem separaten Node.js-Prozess aus – dem Erweiterungs-Host. Dies isoliert den Erweiterungscode von VS Code selbst, isoliert aber nicht verschiedene Erweiterungen voneinander. Aufgrund der Single-Threaded-Natur von JavaScript kann eine Erweiterung, ob absichtlich oder nicht, den Erweiterungs-Host-Thread monopolisieren, alle anderen Erweiterungen blockieren und Vorgänge als nicht reagierend erscheinen lassen.

VS Code überwacht jetzt den Erweiterungs-Host, und wenn er nicht reagiert, beginnt VS Code mit der Profilerstellung des Erweiterungs-Hosts. Wenn eine Erweiterung als Ursache für die Nichtreaktion identifiziert wird, wird eine minimierte Benachrichtigung angezeigt, die den Benutzer auffordert, ein Problem zu melden.

Slow Extension Identified

Als Benutzer halten Sie die Glocke in der Statusleiste im Auge, da die Benachrichtigung klein ist. Als Erweiterungsautor, wenn Sie eine Benachrichtigung über Nichtreaktion erhalten, überprüfen Sie bitte diese Anleitung, die erklärt, was passiert ist und wie man das CPU-Profil öffnet, das dem Problem beigefügt ist.

Vorschau-Features

Vorschau-Features sind noch nicht zur Veröffentlichung bereit, aber funktionsfähig genug, um sie zu nutzen. Wir freuen uns über Ihr frühes Feedback, während sie sich in der Entwicklung befinden.

HTML-Benutzerdefinierte Tags / Attribute Unterstützung

Die neuen Einstellungen html.experimental.custom.tags und html.experimental.custom.attributes ermöglichen es Ihnen, eine Liste von Tags und Attributen anzugeben, die VS Code beim Start lädt. Wenn Sie HTML-Dateien bearbeiten, bietet VS Code Auto-Vervollständigung und Hover für diese Tags und Attribute. Dies funktioniert hervorragend mit Web Components, zum Beispiel.

HTML custom tags and attributes

Sie können das Repository octref/web-components-examples öffnen, um diese Funktion zu testen. Diese Funktion ist in der Vorschau und sowohl die Einstellungsnamen als auch das JSON-Format können sich ändern.

Wenn Sie Feedback oder Funktionswünsche haben, melden Sie sich bitte in Issue #62976.

Netzwerk-Proxy-Unterstützung für Erweiterungen

Es gibt eine experimentelle Einstellung Http: Proxy Support zur Aktivierung der Netzwerkkproxysupports für alle Erweiterungen. Obwohl wir noch an einigen Details arbeiten, laden wir Sie ein, es auszuprobieren und uns mitzuteilen, ob es für Sie funktioniert. (Beachten Sie, dass die Aktivierung der Netzwerkkproxysupports derzeit die Anmeldung der GitHub Pull-Request-Erweiterung unterbricht.)

HTTP Proxy Support

Das Setzen auf override sollte für die meisten Setups am besten funktionieren, versuchen Sie on zum Vergleich, wenn das nicht gut funktioniert.

Erweiterungsentwicklung

Deklaration anzeigen

Wir haben eine DeclarationProvider-Schnittstelle hinzugefügt, die Erweiterungen implementieren können, um die Funktion Gehe zur Deklaration zu unterstützen. Deklarationsanbieter sollten Speicherorte zurückgeben, die die Deklaration eines Symbols sind. Wenn mehrere Anbieter für dieselbe Datei registriert sind, werden ihre Ergebnisse zusammengeführt.

Signaturhilfe-Kontext

SignatureHelpProviders erhalten jetzt einen context-Parameter, der Informationen darüber liefert, wie die Signaturhilfe ausgelöst wurde. Der Kontext umfasst:

  • Wie die Signaturhilfe ausgelöst wurde (Triggerzeichen, ein Befehl oder eine Dokumentenkontextänderung).
  • Das Zeichen, das die Signaturhilfe ausgelöst hat.
  • Wurde die Signaturhilfe zuvor angezeigt, als sie ausgelöst wurde?
import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
  vscode.languages.registerSignatureHelpProvider(
    'markdown',
    new (class implements vscode.SignatureHelpProvider {
      provideSignatureHelp(
        document: vscode.TextDocument,
        position: vscode.Position,
        token: vscode.CancellationToken,
        context: vscode.SignatureHelpContext
      ): vscode.ProviderResult<vscode.SignatureHelp> {
        // Return fake signature help result
        const sigHelp = new vscode.SignatureHelp();
        sigHelp.activeParameter = 0;
        sigHelp.activeSignature = 0;
        sigHelp.signatures = [new vscode.SignatureInformation(getLabel(context))];
        return sigHelp;
      }
    })(),
    {
      triggerCharacters: ['('],
      retriggerCharacters: [',']
    }
  );
}

function getLabel(context: vscode.SignatureHelpContext): string {
  const parts = [];
  // How was signature help triggered
  switch (context.triggerKind) {
    case vscode.SignatureHelpTriggerKind.Invoke:
      parts.push('invoke');
      break;
    case vscode.SignatureHelpTriggerKind.ContentChange:
      parts.push('change');
      break;
    case vscode.SignatureHelpTriggerKind.TriggerCharacter:
      parts.push('character');
      break;
  }

  // The character (if any) that caused signature help to be triggered
  if (context.triggerCharacter) {
    parts.push(context.triggerCharacter);
  }

  // Was signature help already showing when it was triggered again?
  if (context.isRetrigger) {
    parts.push('retrigger');
  }

  return parts.join(' ');
}

Darüber hinaus können SignatureHelpProviders jetzt mit einer unterschiedlichen Menge von Trigger- und Re-Trigger-Zeichen registriert werden. Re-Trigger-Zeichen lösen die Signaturhilfe nur aus, wenn sie bereits angezeigt wird.

Hier sehen Sie den obigen SignatureHelpProvider in Aktion.

The above signature help provider in action

Konfigurieren von beigesteuerten TypeScript-Server-Plugins

Erweiterungen können jetzt Konfigurationsdaten an beitragende TypeScript-Server-Plugins über eine von VS Codes integrierter TypeScript-Erweiterung bereitgestellte API senden.

// In your VS Code extension

export async function activate(context: vscode.ExtensionContext) {
  // Get the TS extension
  const tsExtension = vscode.extensions.gettsExtension(
    'vscode.typescript-language-features'
  );
  if (!tsExtension) {
    return;
  }

  await tsExtension.activate();

  // Get the API from the TS extension
  if (!tsExtension.exports || !tsExtension.exports.getAPI) {
    return;
  }

  const api = tsExtension.exports.getAPI(0);
  if (!api) {
    return;
  }

  // Configure the 'my-typescript-plugin-id' plugin
  api.configurePlugin('my-typescript-plugin-id', {
    someValue: process.env['SOME_VALUE']
  });
}

Das TypeScript-Server-Plugin empfängt die Konfigurationsdaten über eine Methode onConfigurationChanged.

// In your TypeScript plugin

import * as ts_module from 'typescript/lib/tsserverlibrary';

export = function init({ typescript }: { typescript: typeof ts_module }) {
  return {
    create(info: ts.server.PluginCreateInfo) {
      // Create new language service
    },
    onConfigurationChanged(config: any) {
      // Receive configuration changes sent from VS Code
    }
  };
};

Diese API ermöglicht es VS Code-Erweiterungen, VS Code-Einstellungen mit einem TypeScript-Server-Plugin zu synchronisieren oder das Verhalten eines Plugins dynamisch zu ändern. Schauen Sie sich das TypeScript TSLint Plugin und lit-html-Erweiterungen an, um zu sehen, wie diese API in der Praxis verwendet wird.

Benutzerdefinierte Ansichten

Die vorgeschlagene API zum Hinzufügen einer Alle reduzieren-Aktion zu Ihrer Ansicht ist jetzt stabil.

Beschreibung des Tree-Elements

Sie können Ihrem Tree-Element jetzt eine Beschreibung hinzufügen, indem Sie die Eigenschaft description in TreeItem verwenden. Wenn das Tree-Element von einer Ressource unterstützt wird, können Sie VS Code auch die Beschreibung aus der Ressource ableiten lassen, indem Sie description auf true setzen.

/**
 * A human readable string which is rendered less prominently.
 * When `true`, it is derived from [resourceUri](#_TreeItem.resourceUri), and when `falsy`, it is not shown.
 */
description?: string | boolean;

Tree Item Description

Debugging-API

Erweiterte DebugSession

Die API DebugSession stellt nun den Arbeitsbereichsordner und die aufgelöste Debug-Konfiguration bereit. Aufgelöst bedeutet, dass alle Variablen ersetzt wurden und plattformspezifische Attributabschnitte für die passende Plattform "geglättet" und für nicht passende Plattformen entfernt wurden.

Eindeutige ID für Breakpoints

Die Klasse Breakpoint stellt nun eine eindeutige ID (id) bereit, die sich über ihre gesamte Lebensdauer nicht ändert.

Fertige API zur Steuerung der Erstellung von Debug-Adaptern

In diesem Meilenstein haben wir die Erweiterungs-API zur Steuerung der Erstellung von Debug-Adaptern fertiggestellt. Die API verwendet eine neue DebugAdapterDescriptorFactory, die für einen bestimmten Debug-Typ bei vscode.debug.registerDebugAdapterDescriptorFactory registriert werden muss. Die Factory hat eine einzige Methode createDebugAdapterDescriptor, die von VS Code aufgerufen wird, wann immer ein Debug-Adapter benötigt wird. Da die Debug-Sitzung als Argument übergeben wird (und die Sitzung nun sowohl den Arbeitsbereichsordner als auch die aufgelöste Konfiguration bereitstellt), hat die Implementierung Zugriff auf den vollständigen Kontext, wenn sie aufgefordert wird, den Debug-Adapter zu erstellen. createDebugAdapterDescriptor muss ein Objekt zurückgeben, das VS Code beschreibt, wie der Debug-Adapter erstellt und/oder verbunden wird.

  • Ein DebugAdapterExecutable-Deskriptor veranlasst VS Code, den Debug-Adapter pro Sitzung als externen Prozess zu starten und über stdin/stdout damit zu kommunizieren. Ein Options-Eigenschaftspaket kann das Arbeitsverzeichnis und Umgebungsvariablen angeben.
  • Ein DebugAdapterServer veranlasst VS Code, sich mit einem Serverprozess zu verbinden, der mehrere Sitzungen verwaltet und über einen Socket kommuniziert.

Bitte beachten Sie: Mit der Fertigstellung dieser API deprecieren wir die alte (vorgeschlagene) API DebugConfigurationProvider.debugAdapterExecutable und den sehr alten Befehls-basierten Ansatz (Beitragspunkt Debuggers, Attribut: adapterExecutableCommand). Bitte wechseln Sie von diesen APIs weg, da wir planen, die Unterstützung dafür in der nächsten Version zu entfernen.

Dieses Snippet zeigt, wie diese API verwendet werden kann, um einen in seine enthaltende Erweiterung eingebetteten Debug-Adapter auszuführen.

let server: Net.Server;
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable) {
    // start server on launch of first debug session
    if (!server) {
      // start listening on a random port
      server = Net.createServer(socket => {
        const s = new MockDebugSession();
        s.setRunAsServer(true);
        s.start(<NodeJS.ReadableStream>socket, socket);
      }).listen(0);
    }
    // make VS Code connect to debug server instead of launching debug adapter
    return new DebugAdapterServer(server.address().port);
  }
});

Fertige Debug Adapter Tracker API

In diesem Meilenstein haben wir die Erweiterungs-API zur Verfolgung des Debug Adapter Protocol, das zwischen VS Code und Debugger-Erweiterungen verwendet wird, fertiggestellt. Die API verwendet eine neue DebugAdapterTrackerFactory, die für einen Debug-Typ bei vscode.debug.registerDebugAdapterTrackerFactory registriert werden muss. Die Factory hat eine einzige Methode createDebugAdapterTracker, die von VS Code aufgerufen wird, bevor es mit der Kommunikation mit dem Debug-Adapter beginnt. createDebugAdapterDescriptor muss eine Implementierung eines DebugAdapterTracker (oder undefined, um das Tracking zu verhindern) zurückgeben.

Dieses Snippet zeigt, wie diese API verwendet werden kann, um das Debug Adapter Protocol für den Node.js-Debugger zu protokollieren.

vscode.debug.registerDebugAdapterTrackerFactory('node', {
  createDebugAdapterTracker(session: DebugSession) {
    return {
      onWillReceiveMessage: m => console.log(`> ${JSON.stringify(m, undefined, 2)}`),
      onDidSendMessage: m => console.log(`< ${JSON.stringify(m, undefined, 2)}`)
    };
  }
});

Um sicherzustellen, dass die Erweiterung bei Bedarf aktiviert wird, kann ein Aktivierungsereignis onDebugAdapterProtocolTracker:<debug type> in der package.json verwendet werden. Wenn der Debug-Typ weggelassen wird, wird die Erweiterung für alle Debug-Typen aktiviert.

{
  "activationEvents": ["onDebugAdapterProtocolTracker:node"]
}

Debug Adapter Protocol

Neues Attribut shellProcessId für die Antwort runInTerminal

Wenn ein Debug-Adapter ein Ziel in einem Terminal ausführen muss, kann er die DAP-Anfrage runInTerminal verwenden. Diese Anfrage kann optional die processId des Zielprozesses zurückgeben, aber in der Praxis konnte keine Frontend-Implementierung diese Informationen liefern. Aus diesem Grund haben wir ein neues Attribut shellProcessId zur Rückgabe der Prozess-ID der Terminal-Shell (die viel einfacher zu ermitteln ist) eingeführt.

Zwischenablage

Die Zwischenablage-API ist fertiggestellt und kann jetzt von allen Erweiterungen verwendet werden. Sie ermöglicht Erweiterungen, Zeichenfolgen in die Betriebssystem-Zwischenablage zu kopieren und daraus einzufügen.

Abschluss-Elemente

Beim Einfügen eines Abschluss-Elements, das mehrere Zeilen umfasst, passt VS Code die Einrückung an. Dies ist nicht immer erwünscht und daher haben wir vscode.CompletionItem.keepWhitespace hinzugefügt, um dieses Verhalten zu steuern.

Bezeichnungen für Symbolanbieter

Bei der Registrierung eines Dokumentensymbolanbieters kann jetzt eine Bezeichnung (DocumentSymbolProviderMetadata) angegeben werden. Diese Bezeichnung wird in den Breadcrumbs und der Outline-Ansicht angezeigt, wenn ein Dokument mehrere Symbolanbieter hat.

Vorgeschlagene Erweiterungs-APIs

Jeder Meilenstein bringt neue vorgeschlagene APIs mit sich, die Erweiterungsautoren ausprobieren können. Wie immer sind wir an Ihrem Feedback interessiert. So gehen Sie vor, um eine vorgeschlagene API auszuprobieren

  • 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 Ihr Projekt.

Beachten Sie, dass Sie keine Erweiterung veröffentlichen können, die eine vorgeschlagene API verwendet. Wir werden wahrscheinlich wichtige Änderungen in der nächsten Version vornehmen und wollen niemals bestehende Erweiterungen brechen.

Benutzerdefinierte Ansichten unterstützen Nachrichtentext

Nachrichten im Baumansicht

Sie können Ihrer Baumansicht jetzt eine Nachricht über die Eigenschaft message in TreeView festlegen.

/**
 * An optional human-readable message that will be rendered in the view.
 */
message?: string | MarkdownString;

Tree View Message

Intelligente Auswahl und Erweiterungen

Wir haben eine vorgeschlagene API zur Unterstützung der intelligenten Auswahlfunktion hinzugefügt. Heute werden bei Ausführung des Befehls Auswahl erweitern oder Auswahl verkleinern Auswahlbereiche anhand einer schwachen Heuristik berechnet. Während wir daran arbeiten, diese Heuristik zu verbessern, möchten wir auch Erweiterungsautoren einbeziehen. Daher haben wir eine vorgeschlagene API für einen SelectionRangeProvider hinzugefügt.

Technik

Entfernung von WinJS-Promise

Als VS Code startete, war JavaScript noch nicht, was es heute ist. Zum Beispiel gab es keine native Promise und damals entschied sich das Team, WinJS.Promise zu verwenden. Schnell vorgespult bis heute, die Situation ist anders: native Promises sind real und WinJS.Promise ist obsolet.

Deshalb sind wir dabei, von WinJS.Promise wegzukommen. Dies ist kein einfaches Unterfangen, da die API und das Laufzeitverhalten unterschiedlich sind. Wir haben bei etwa 10000 Referenzen auf WinJS.Promise begonnen und sind auf 1471 heruntergekommen, von denen etwa 500 Instanziierungen und keine reinen Typannotationen sind. Wir sind zuversichtlich, dass wir diese epische Reise bald beenden werden!

Fortgesetzte Erkundung von Electron 3.0

Während dieses Meilensteins haben wir die Bündelung von Electron 3.0.0 in VS Code weiter erforscht. Dies ist eine große Electron-Version und kommt mit Chrome 66 und Node.js 10.x (ein großer Sprung nach vorn im Vergleich zu unserer aktuellen Version, die Chrome 61 und Node.js 8.x hat). Wir planen, das Update im Dezember an unsere Insiders-Benutzer weiterzugeben, um zusätzliches Feedback zu sammeln. Wenn Sie helfen möchten, stellen Sie sicher, dass Sie VS Code Insiders installieren.

Community-Problemverfolgung

Die Community hilft uns seit sehr langer Zeit periodisch bei der Problemverfolgung. Da wir immer mehr Probleme (derzeit durchschnittlich 70 pro Tag) gemeldet sehen, haben wir damit begonnen, die aktivsten Community-Mitglieder einzuladen, spezifische Labels zu den Problemen hinzuzufügen, an denen sie arbeiten. Da GitHub keine feingranularen Berechtigungen hat, verwenden wir unseren Issue-Bot, um bestimmte Kommentare aufzufangen und Labels dafür hinzuzufügen. Sehen Sie sich den Abschnitt Vielen Dank unten für Danksagungen an.

Strikte Nullprüfung

Unsere Arbeit zur strengen Nullprüfung der Hauptcodebasis von VS Code wurde fortgesetzt. Wir führen jetzt eine strenge Nullprüfung für etwa 800 Dateien durch und werden diese Arbeit fortsetzen, bis die gesamte Codebasis abgedeckt ist.

Sie können diese technische Anstrengung verfolgen und mehr über den Prozess unter Issue #60565 erfahren.

Beiträge zu Erweiterungen

Unser Team pflegt oder trägt zu einer Reihe von VS Code-Erweiterungen bei. Am bemerkenswertesten in diesem Monat:

GitHub Pull Requests

In diesem Meilenstein haben wir an Verbesserungen für die GitHub Pull Requests-Erweiterung gearbeitet.

Hier sind einige der neuen Funktionen:

  • Pull-Anfragen direkt von Ihrem lokalen Branch erstellen.
  • Eine Reihe von Quellcodeänderungen auf einer ausgecheckten Pull-Anfrage vorschlagen.
  • Statusprüfungsstatusinformationen auf der Pull-Anfrage-Beschreibungsseite anzeigen.

Sie können die vollständigen Release Notes für die Erweiterung unter vscode-pull-request-github Releases lesen.

Bemerkenswerte Fehlerbehebungen

  • 37929: Debug-Umgebungen beim Erstellen des Dropdown-Menüs nicht aktivieren
  • 60187: Debugger wird nicht von Breakpoints im Jest-Test erreicht
  • 61590: Einstellungen und Tastenkombinationen-Editor zeigen Editor-Aktionen konsistent an
  • 62370: Verbesserte Diagnostik-Hovers im Editor
  • 62500: "Bis zur Cursorzeile ausführen" zum Befehlspalette hinzufügen
  • 62778: Zentrierte Layout-Größe wird nicht wiederhergestellt
  • 63618: Debugging von Electron 2.0.13 64bit fehlgeschlagen mit Fehler "Cannot connect to runtime process, timeout after 10000ms". Aber erfolgreich auf Electron 32bit

Vielen Dank

Nicht zuletzt ein großes Dankeschön! an die folgenden Personen, die dazu beigetragen haben, VS Code noch besser zu machen

Beiträge zu unserer Fehlerverfolgung

Beiträge zu vscode

Beiträge zu vscode-vsce

Beiträge zu vscode-eslint

Beiträge zu language-server-protocol

Beiträge zu vscode-languageserver-node

Beiträge zu vscode-html-languageservice

  • @vzvu3k6k
    • Vervollständigungen für doctype in der ersten Zeile bereitstellen PR #40
    • Kleinere Linting-Korrekturen PR #39

Beiträge zu vscode-generator-code

Beiträge zu debug-adapter-protocol

Beiträge zu vscode-chrome-debug-core

  • @digeff: Keine src-Änderungsereignisse für Speicherquellen senden PR #378
  • Shennie Yao (@Shenniey)
    • Sicherstellen, dass bp.actual location nicht null/undefined ist, bevor versucht wird, auf die Zeilennummer zuzugreifen PR #381
    • URL kanonisieren, damit das passende Skript beim Auflösen von Breakpoints gefunden werden kann PR #379

Beiträge zu vscode-chrome-debug

Beiträge zu vscode-azure-account

Beiträge zu vscode-recipes

Beiträge zu localization

Es gibt fast 1400 Mitglieder im Transifex-Team des VS Code-Projekts, mit etwa 100 aktiven Mitwirkenden pro Monat. Wir schätzen Ihre Beiträge, sei es durch neue Übersetzungen, Abstimmungen über Übersetzungen oder Vorschläge zur Prozessverbesserung.

Hier ist eine Momentaufnahme der Mitwirkenden für diese Version. Details zum Projekt, einschließlich der Liste der Mitwirkendennamen, finden Sie auf der Projektseite unter https://aka.ms/vscodeloc.

  • Bulgarisch: Любомир Василев.
  • Katalanisch: Adolfo Jayme-Barrientos, Enric Soler Rastrollo (MaDDoGo), Oriol Torrillas.
  • Tschechisch: Vít Staniček, Ondra Kalousek, Kryštof Černý.
  • Dänisch: Johan Fagerberg.
  • Finnisch: Feetu Nyrhinen, Jussi Palo, Ahto Simakuutio.
  • Französisch: Antoine Griffard, Thierry DEMAN-BARCELO, Adrien Clerbois.
  • Deutsch: Carsten Kneip.
  • Griechisch: George Xenakis, Christos Koutsiaris, dimipapaioan.
  • Hindi: Anand Chalakkal Jose Mohan, Kiren Paul, Ashwini Gupta, amgusain, Pointless Banter, Shaswat Rungta, Adnan Shaikh, Shashida Nand Jha.
  • Ungarisch: Tar Dániel.
  • Chinesisch vereinfacht: feiyun0112 feiyun0112, Tingting Yi, XIANG ZUO, Tony Xia, G.Y. Z, Dave Young, Jessica Zhang, 驰 雷, Liam Kennedy, bh wu, WangCG duoduobear, ziqiang sun, 正元 刘, 越 郑, peng wei, xiong Fu, 吉姆 舒, 瑜 周, 仁松 陈, Jiang LI.
  • Chinesisch traditionell: Winnie Lin , Duran Hsieh, Hans Chiu, Alan Liu.
  • Indonesisch: Laurensius Dede Suhardiman, Wildan Mubarok, Joshua Siagian, Rizki A. Wibowo.
  • Japanisch: Satoshi Kajiura, Shunya Tajima, Yuichi Nukiyama, Yoshihisa Ozaki, dkp sk, Hiroyuki Mori.
  • Kannada: Sanjay !, Sushmit Patil.
  • Malayalam: Kiren Paul, Anand Chalakkal Jose Mohan.
  • Norwegisch: Espen Klein Nilsen, Ivar L, Simen Dæhlin, Daniel Bjørnbakk.
  • Polnisch: Artur.
  • Portugiesisch (Brasilien): Danilo Dantas, Thiago Custodio, Vinicius Ribeiro, Lucas Santos, Gabriel Henrique Oliveira de Mello.
  • Rumänisch: Szauka.
  • Russisch: Mikhail Zabaluev, Acupofspirt, Ilya Umnov.
  • Singalesisch: Anand Chalakkal Jose Mohan.
  • Spanisch: Jorge Serrano Pérez, Alejandro Medina, Alberto Poblacion, Carlos Longarela, Carlos Mendible, Guillermo Callaghan, Alfonso Jesus Flores Alvarado, Andy Gonzalez.
  • Tamil: Vijay Nirmal, Avinash, Jeyanthinath Muthuram, Narayanan Singaram.
  • Telugu: Raja Tirumala Rao Guna.
  • Türkisch: Eyüp DALAN, Mustafa Turhan, Türker YILDIRIM.
  • Vietnamesisch: Nguyễn Nhật Tân.
© . This site is unofficial and not affiliated with Microsoft.