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

Programmatische Sprachfunktionen

Programmatische Sprachfunktionen ist eine Sammlung von intelligenten Bearbeitungsfunktionen, die von der vscode.languages.* API angetrieben werden. Es gibt zwei gängige Wege, eine dynamische Sprachfunktion in Visual Studio Code bereitzustellen. Nehmen wir Hover als Beispiel

vscode.languages.registerHoverProvider('javascript', {
  provideHover(document, position, token) {
    return {
      contents: ['Hover Content']
    };
  }
});

Wie Sie oben sehen, bietet die vscode.languages.registerHoverProvider API eine einfache Möglichkeit, Hover-Inhalte für JavaScript-Dateien bereitzustellen. Nachdem diese Erweiterung aktiviert wurde, fragt VS Code bei jedem Hover über JavaScript-Code alle HoverProvider für JavaScript ab und zeigt das Ergebnis in einem Hover-Widget an. Die Liste der Sprachfunktionen und das unten gezeigte illustrierte GIF bieten eine einfache Möglichkeit, die VS Code API / LSP-Methode zu finden, die Ihre Erweiterung benötigt.

Ein alternativer Ansatz ist die Implementierung eines Sprachservers, der das Language Server Protocol spricht. Die Funktionsweise ist

  • Eine Erweiterung stellt einen Language Client und einen Language Server für JavaScript bereit.
  • Der Language Client ist wie jede andere VS Code-Erweiterung und läuft im Node.js Extension Host-Kontext. Wenn er aktiviert wird, startet er den Language Server in einem separaten Prozess und kommuniziert mit ihm über das Language Server Protocol.
  • Sie bewegen den Mauszeiger über JavaScript-Code in VS Code
  • VS Code informiert den Language Client über den Hover
  • Der Language Client fragt den Language Server nach einem Hover-Ergebnis ab und sendet es zurück an VS Code
  • VS Code zeigt das Hover-Ergebnis in einem Hover-Widget an

Der Prozess erscheint komplizierter, bietet aber zwei wesentliche Vorteile

  • Der Language Server kann in jeder Sprache geschrieben werden
  • Der Language Server kann wiederverwendet werden, um intelligente Bearbeitungsfunktionen für mehrere Editoren bereitzustellen

Für eine ausführlichere Anleitung besuchen Sie die Anleitung für Sprachserver-Erweiterungen.


Liste der Sprachfunktionen

Diese Liste enthält die folgenden Elemente für jede Sprachfunktion

  • Eine Abbildung der Sprachfunktion in VS Code
  • Zugehörige VS Code API
  • Zugehörige LSP-Methoden
VS Code API LSP-Methode
createDiagnosticCollection PublishDiagnostics
registerCompletionItemProvider Completion & Completion Resolve
registerInlineCompletionItemProvider
registerHoverProvider Hover
registerSignatureHelpProvider SignatureHelp
registerDefinitionProvider Definition
registerTypeDefinitionProvider TypeDefinition
registerImplementationProvider Implementation
registerReferenceProvider Referenzen
registerDocumentHighlightProvider DocumentHighlight
registerDocumentSymbolProvider DocumentSymbol
registerCodeActionsProvider CodeAction
registerCodeLensProvider CodeLens & CodeLens Resolve
registerDocumentLinkProvider DocumentLink & DocumentLink Resolve
registerColorProvider DocumentColor & Color Presentation
registerDocumentFormattingEditProvider Formatierung
registerDocumentRangeFormattingEditProvider RangeFormatting
registerOnTypeFormattingEditProvider OnTypeFormatting
registerRenameProvider Rename & Prepare Rename
registerFoldingRangeProvider FoldingRange

Diagnosen bereitstellen

Diagnosen sind eine Möglichkeit, Probleme mit dem Code anzuzeigen.

Diagnostics indicating a misspelled method name

Language Server Protocol

Ihr Sprachserver sendet die Nachricht textDocument/publishDiagnostics an den Language Client. Die Nachricht enthält ein Array von Diagnoseelementen für eine Ressourcen-URI.

Hinweis: Der Client fragt den Server nicht nach Diagnosen ab. Der Server sendet die Diagnoseinformationen an den Client.

Direkte Implementierung

let diagnosticCollection: vscode.DiagnosticCollection;

export function activate(ctx: vscode.ExtensionContext): void {
  ...
  ctx.subscriptions.push(getDisposable());
  diagnosticCollection = vscode.languages.createDiagnosticCollection('go');
  ctx.subscriptions.push(diagnosticCollection);
  ...
}

function onChange() {
  let uri = document.uri;
  check(uri.fsPath, goConfig).then(errors => {
    diagnosticCollection.clear();
    let diagnosticMap: Map<string, vscode.Diagnostic[]> = new Map();
    errors.forEach(error => {
      let canonicalFile = vscode.Uri.file(error.file).toString();
      let range = new vscode.Range(error.line-1, error.startColumn, error.line-1, error.endColumn);
      let diagnostics = diagnosticMap.get(canonicalFile);
      if (!diagnostics) { diagnostics = []; }
      diagnostics.push(new vscode.Diagnostic(range, error.msg, error.severity));
      diagnosticMap.set(canonicalFile, diagnostics);
    });
    diagnosticMap.forEach((diags, file) => {
      diagnosticCollection.set(vscode.Uri.parse(file), diags);
    });
  })
}

Grundlegend

Diagnosen für offene Editoren melden. Minimal muss dies bei jeder Speicherung geschehen. Besser ist es, Diagnosen basierend auf dem nicht gespeicherten Inhalt des Editors zu berechnen.

Erweitert

Diagnosen nicht nur für die offenen Editoren, sondern für alle Ressourcen im geöffneten Ordner melden, unabhängig davon, ob sie jemals in einem Editor geöffnet waren oder nicht.

Code-Vervollständigungsvorschläge anzeigen

Code-Vervollständigungen bieten kontextbezogene Vorschläge für den Benutzer.

Code Completion prompting variable, method, and parameter names while writing code

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Vervollständigungen bereitstellt und ob er die Methode completionItem\resolve unterstützt, um zusätzliche Informationen für die berechneten Vervollständigungselemente bereitzustellen.

{
    ...
    "capabilities" : {
        "completionProvider" : {
            "resolveProvider": "true",
            "triggerCharacters": [ '.' ]
        }
        ...
    }
}

Direkte Implementierung

class GoCompletionItemProvider implements vscode.CompletionItemProvider {
    public provideCompletionItems(
        document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken):
        Thenable<vscode.CompletionItem[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(getDisposable());
    ctx.subscriptions.push(
        vscode.languages.registerCompletionItemProvider(
            GO_MODE, new GoCompletionItemProvider(), '.', '\"'));
    ...
}

Grundlegend

Sie unterstützen keine Resolve-Provider.

Erweitert

Sie unterstützen Resolve-Provider, die zusätzliche Informationen für Vervollständigungsvorschläge berechnen, die der Benutzer auswählt. Diese Informationen werden neben dem ausgewählten Element angezeigt.

Inline-Vervollständigungen anzeigen

Inline-Vervollständigungen präsentieren mehrdeutige Vorschläge direkt im Editor (Geistertext).

Inline Completions suggesting code as ghost text while writing code

Direkte Implementierung

vscode.languages.registerInlineCompletionItemProvider({ language: 'javascript' }, {
    provideInlineCompletionItems(document, position, context, token) {
        const result: vscode.InlineCompletionList = {
            items: [],
            commands: [],
        };

        ...

        return result;
    }
});

Sie können ein vollständiges Beispiel in der Beispielerweiterung für Inline-Vervollständigungen erkunden.

Grundlegend

Geben Sie Inline-Vervollständigungen nur für eine bekannte Liste von Mustern zurück, die auf dem aktuellen Zeileninhalt basieren, für bestimmte Sprachen.

Erweitert

Geben Sie Inline-Vervollständigungen basierend auf dem Inhalt des gesamten Dokuments oder Arbeitsbereichs und komplexeren Mustern zurück.

Hover anzeigen

Hover zeigen Informationen über das Symbol/Objekt unter dem Mauszeiger an. Dies ist normalerweise der Typ des Symbols und eine Beschreibung.

Showing details about a workspace and a method when hovering over them

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Hover bereitstellt.

{
    ...
    "capabilities" : {
        "hoverProvider" : "true",
        ...
    }
}

Darüber hinaus muss Ihr Sprachserver auf die Anfrage textDocument/hover reagieren.

Direkte Implementierung

class GoHoverProvider implements HoverProvider {
    public provideHover(
        document: TextDocument, position: Position, token: CancellationToken):
        Thenable<Hover> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerHoverProvider(
            GO_MODE, new GoHoverProvider()));
    ...
}

Grundlegend

Typinformationen anzeigen und Dokumentation einschließen, falls vorhanden.

Erweitert

Methodensignaturen im gleichen Stil wie der Code einfärben.

Hilfe bei Funktions- und Methodensignaturen

Wenn der Benutzer eine Funktion oder Methode eingibt, Informationen über die aufgerufene Funktion/Methode anzeigen.

Showing information about the getPackageInfo method including the necessary parameters

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Signaturhilfe anbietet.

{
    ...
    "capabilities" : {
        "signatureHelpProvider" : {
            "triggerCharacters": [ '(' ]
        }
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/signatureHelp reagieren.

Direkte Implementierung

class GoSignatureHelpProvider implements SignatureHelpProvider {
    public provideSignatureHelp(
        document: TextDocument, position: Position, token: CancellationToken):
        Promise<SignatureHelp> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerSignatureHelpProvider(
            GO_MODE, new GoSignatureHelpProvider(), '(', ','));
    ...
}

Grundlegend

Stellen Sie sicher, dass die Signaturhilfe die Dokumentation der Parameter der Funktion oder Methode enthält.

Erweitert

Nichts Zusätzliches.

Definitionen eines Symbols anzeigen

Ermöglichen Sie dem Benutzer, die Definition von Variablen/Funktionen/Methoden direkt dort zu sehen, wo die Variablen/Funktionen/Methoden verwendet werden.

Right click a variable, function, or method and select "Go to Definition" to jump to the definition

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Definitionsspeicherorte bereitstellt.

{
    ...
    "capabilities" : {
        "definitionProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/definition reagieren.

Direkte Implementierung

class GoDefinitionProvider implements vscode.DefinitionProvider {
    public provideDefinition(
        document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken):
        Thenable<vscode.Location> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerDefinitionProvider(
            GO_MODE, new GoDefinitionProvider()));
    ...
}

Grundlegend

Wenn ein Symbol mehrdeutig ist, können Sie mehrere Definitionen anzeigen.

Erweitert

Nichts Zusätzliches.

Alle Referenzen auf ein Symbol finden

Ermöglichen Sie dem Benutzer, alle Speicherorte im Quellcode anzuzeigen, an denen eine bestimmte Variable/Funktion/Methode/Symbol verwendet wird.

Right clicking and selecting "Find All References" to highlight all the locations where that symbol is used

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Speicherorte für Symbolreferenzen bereitstellt.

{
    ...
    "capabilities" : {
        "referencesProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/references reagieren.

Direkte Implementierung

class GoReferenceProvider implements vscode.ReferenceProvider {
    public provideReferences(
        document: vscode.TextDocument, position: vscode.Position,
        options: { includeDeclaration: boolean }, token: vscode.CancellationToken):
        Thenable<vscode.Location[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerReferenceProvider(
            GO_MODE, new GoReferenceProvider()));
    ...
}

Grundlegend

Geben Sie den Speicherort (Ressourcen-URI und Bereich) für alle Referenzen zurück.

Erweitert

Nichts Zusätzliches.

Alle Vorkommen eines Symbols in einem Dokument hervorheben

Ermöglichen Sie dem Benutzer, alle Vorkommen eines Symbols im offenen Editor anzuzeigen.

Select a symbol to highlight all occurrences

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Dokumentenspeicherorte für Symbole bereitstellt.

{
    ...
    "capabilities" : {
        "documentHighlightProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/documentHighlight reagieren.

Direkte Implementierung

class GoDocumentHighlightProvider implements vscode.DocumentHighlightProvider {
    public provideDocumentHighlights(
        document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken):
        vscode.DocumentHighlight[] | Thenable<vscode.DocumentHighlight[]>;
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerDocumentHighlightProvider(
            GO_MODE, new GoDocumentHighlightProvider()));
    ...
}

Grundlegend

Sie geben die Bereiche im Dokument des Editors zurück, in denen die Referenzen gefunden werden.

Erweitert

Nichts Zusätzliches.

Alle Symboldefinitionen in einem Dokument anzeigen

Ermöglichen Sie dem Benutzer, schnell zu jeder Symboldefinition im geöffneten Editor zu navigieren.

Navigate to a symbol definition in the open editor using @

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Dokumentenspeicherorte für Symbole bereitstellt.

{
    ...
    "capabilities" : {
        "documentSymbolProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/documentSymbol reagieren.

Direkte Implementierung

class GoDocumentSymbolProvider implements vscode.DocumentSymbolProvider {
    public provideDocumentSymbols(
        document: vscode.TextDocument, token: vscode.CancellationToken):
        Thenable<vscode.SymbolInformation[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerDocumentSymbolProvider(
            GO_MODE, new GoDocumentSymbolProvider()));
    ...
}

Grundlegend

Geben Sie alle Symbole im Dokument zurück. Definieren Sie die Arten von Symbolen wie Variablen, Funktionen, Klassen, Methoden usw.

Erweitert

Nichts Zusätzliches.

Alle Symboldefinitionen im Ordner anzeigen

Ermöglichen Sie dem Benutzer, schnell zu Symboldefinitionen überall im geöffneten Ordner (Arbeitsbereich) in VS Code zu navigieren.

Navigate to symbol definitions in the workspace using #

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er globale Symbolspeicherorte bereitstellt.

{
    ...
    "capabilities" : {
        "workspaceSymbolProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage workspace/symbol reagieren.

Direkte Implementierung

class GoWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider {
    public provideWorkspaceSymbols(
        query: string, token: vscode.CancellationToken):
        Thenable<vscode.SymbolInformation[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerWorkspaceSymbolProvider(
            new GoWorkspaceSymbolProvider()));
    ...
}

Grundlegend

Geben Sie alle Symbole zurück, die vom Quellcode im geöffneten Ordner definiert werden. Definieren Sie die Arten von Symbolen wie Variablen, Funktionen, Klassen, Methoden usw.

Erweitert

Nichts Zusätzliches.

Mögliche Aktionen bei Fehlern oder Warnungen

Stellen Sie dem Benutzer mögliche Korrekturmaßnahmen direkt neben einem Fehler oder einer Warnung zur Verfügung. Wenn Aktionen verfügbar sind, erscheint neben dem Fehler oder der Warnung eine Glühbirne. Wenn der Benutzer auf die Glühbirne klickt, wird eine Liste der verfügbaren Code Actions angezeigt.

Selecting a light bulb to view a list of available Code Actions

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Code Actions bereitstellt.

{
    ...
    "capabilities" : {
        "codeActionProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/codeAction reagieren.

Direkte Implementierung

class GoCodeActionProvider implements vscode.CodeActionProvider<vscode.CodeAction> {
    public provideCodeActions(
        document: vscode.TextDocument, range: vscode.Range | vscode.Selection,
        context: vscode.CodeActionContext, token: vscode.CancellationToken):
        Thenable<vscode.CodeAction[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerCodeActionsProvider(
            GO_MODE, new GoCodeActionProvider()));
    ...
}

Grundlegend

Stellen Sie Code Actions für Korrekturmaßnahmen bei Fehlern/Warnungen bereit.

Erweitert

Stellen Sie zusätzlich Aktionen zur Manipulation des Quellcodes wie Refactoring bereit. Zum Beispiel Methode extrahieren.

CodeLens - Kontextbezogene, ausführbare Informationen im Quellcode anzeigen

Stellen Sie dem Benutzer ausführbare, kontextbezogene Informationen zur Verfügung, die zwischen dem Quellcode eingebettet angezeigt werden.

CodeLens providing context

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er CodeLens-Ergebnisse bereitstellt und ob er die Methode codeLens\resolve unterstützt, um die CodeLens mit ihrem Befehl zu verbinden.

{
    ...
    "capabilities" : {
        "codeLensProvider" : {
            "resolveProvider": "true"
        }
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/codeLens reagieren.

Direkte Implementierung

class GoCodeLensProvider implements vscode.CodeLensProvider {
    public provideCodeLenses(document: TextDocument, token: CancellationToken):
        CodeLens[] | Thenable<CodeLens[]> {
    ...
    }

    public resolveCodeLens?(codeLens: CodeLens, token: CancellationToken):
         CodeLens | Thenable<CodeLens> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerCodeLensProvider(
            GO_MODE, new GoCodeLensProvider()));
    ...
}

Grundlegend

Definieren Sie die verfügbaren CodeLens-Ergebnisse für ein Dokument.

Erweitert

Binden Sie die CodeLens-Ergebnisse an einen Befehl, indem Sie auf codeLens/resolve reagieren.

Farbanzeigen anzeigen

Ermöglichen Sie dem Benutzer, Farben im Dokument zu sehen und zu ändern.

Showing the color picker

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Farbinformationen bereitstellt.

{
    ...
    "capabilities" : {
        "colorProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfragen textDocument/documentColor und textDocument/colorPresentation reagieren.

Direkte Implementierung

class GoColorProvider implements vscode.DocumentColorProvider {
    public provideDocumentColors(
        document: vscode.TextDocument, token: vscode.CancellationToken):
        Thenable<vscode.ColorInformation[]> {
    ...
    }
    public provideColorPresentations(
        color: Color, context: { document: TextDocument, range: Range }, token: vscode.CancellationToken):
        Thenable<vscode.ColorPresentation[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerColorProvider(
            GO_MODE, new GoColorProvider()));
    ...
}

Grundlegend

Geben Sie alle Farbverweise im Dokument zurück. Stellen Sie Farbpräsentationen für unterstützte Farbformate bereit (z. B. rgb(...), hsl(...)).

Erweitert

Nichts Zusätzliches.

Quellcode in einem Editor formatieren

Bieten Sie dem Benutzer Unterstützung für die Formatierung ganzer Dokumente.

Right click and select format code

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er die Dokumentenformatierung bereitstellt.

{
    ...
    "capabilities" : {
        "documentFormattingProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/formatting reagieren.

Direkte Implementierung

class GoDocumentFormatter implements vscode.DocumentFormattingEditProvider {
    provideDocumentFormattingEdits(
        document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken)
        : vscode.ProviderResult<vscode.TextEdit[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerDocumentFormattingEditProvider(
            GO_MODE, new GoDocumentFormatter()));
    ...
}

Grundlegend

Stellen Sie keine Formatierungsunterstützung bereit.

Erweitert

Sie sollten immer die kleinstmöglichen Textbearbeitungen zurückgeben, die zu einer formatierten Quellcodedarstellung führen. Dies ist entscheidend, um sicherzustellen, dass Markierungen wie Diagnoseergebnisse korrekt angepasst und nicht verloren gehen.

Ausgewählte Zeilen in einem Editor formatieren

Bieten Sie dem Benutzer Unterstützung für die Formatierung eines ausgewählten Zeilenbereichs in einem Dokument.

Select lines, right click, and select format code

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er die Formatierung von Zeilenbereichen unterstützt.

{
    ...
    "capabilities" : {
        "documentRangeFormattingProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/rangeFormatting reagieren.

Direkte Implementierung

class GoDocumentRangeFormatter implements vscode.DocumentRangeFormattingEditProvider{
    public provideDocumentRangeFormattingEdits(
        document: vscode.TextDocument, range: vscode.Range,
        options: vscode.FormattingOptions, token: vscode.CancellationToken):
        vscode.ProviderResult<vscode.TextEdit[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerDocumentRangeFormattingEditProvider(
            GO_MODE, new GoDocumentRangeFormatter()));
    ...
}

Grundlegend

Stellen Sie keine Formatierungsunterstützung bereit.

Erweitert

Sie sollten immer die kleinstmöglichen Textbearbeitungen zurückgeben, die zu einer formatierten Quellcodedarstellung führen. Dies ist entscheidend, um sicherzustellen, dass Markierungen wie Diagnoseergebnisse korrekt angepasst und nicht verloren gehen.

Code inkrementell beim Tippen formatieren

Bieten Sie dem Benutzer Unterstützung für die Formatierung von Text während der Eingabe.

Hinweis: Die Benutzereinstellung editor.formatOnType steuert, ob Quellcode beim Tippen formatiert wird oder nicht.

Visual indicators for formatting as code is typed

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er die Formatierung beim Tippen unterstützt. Er muss dem Client auch mitteilen, bei welchen Zeichen die Formatierung ausgelöst werden soll. moreTriggerCharacters ist optional.

{
    ...
    "capabilities" : {
        "documentOnTypeFormattingProvider" : {
            "firstTriggerCharacter": "}",
            "moreTriggerCharacter": [";", ","]
        }
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/onTypeFormatting reagieren.

Direkte Implementierung

class GoOnTypingFormatter implements vscode.OnTypeFormattingEditProvider{
    public provideOnTypeFormattingEdits(
        document: vscode.TextDocument, position: vscode.Position,
        ch: string, options: vscode.FormattingOptions, token: vscode.CancellationToken):
        vscode.ProviderResult<vscode.TextEdit[]> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerOnTypeFormattingEditProvider(
            GO_MODE, new GoOnTypingFormatter()));
    ...
}

Grundlegend

Stellen Sie keine Formatierungsunterstützung bereit.

Erweitert

Sie sollten immer die kleinstmöglichen Textbearbeitungen zurückgeben, die zu einer formatierten Quellcodedarstellung führen. Dies ist entscheidend, um sicherzustellen, dass Markierungen wie Diagnoseergebnisse korrekt angepasst und nicht verloren gehen.

Symbole umbenennen

Ermöglichen Sie dem Benutzer, ein Symbol umzubenennen und alle Referenzen auf das Symbol zu aktualisieren.

Rename a symbol and update all references to the new name

Language Server Protocol

In der Antwort auf die initialize-Methode muss Ihr Sprachserver ankündigen, dass er Umbenennungsunterstützung bietet.

{
    ...
    "capabilities" : {
        "renameProvider" : "true"
        ...
    }
}

Zusätzlich muss Ihr Sprachserver auf die Anfrage textDocument/rename reagieren.

Direkte Implementierung

class GoRenameProvider implements vscode.RenameProvider {
    public provideRenameEdits(
        document: vscode.TextDocument, position: vscode.Position,
        newName: string, token: vscode.CancellationToken):
        Thenable<vscode.WorkspaceEdit> {
    ...
    }
}

export function activate(ctx: vscode.ExtensionContext): void {
    ...
    ctx.subscriptions.push(
        vscode.languages.registerRenameProvider(
            GO_MODE, new GoRenameProvider()));
    ...
}

Grundlegend

Stellen Sie keine Umbenennungsunterstützung bereit.

Erweitert

Geben Sie die Liste aller Arbeitsbereichs-Bearbeitungen zurück, die durchgeführt werden müssen, z. B. alle Bearbeitungen in allen Dateien, die Referenzen auf das Symbol enthalten.

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