Arbeitsbereiche und Sprachdienste

Sprachdienste können Benutzern von Open Folder dieselben umfangreichen Sprachfeatures bereitstellen, die sie beim Arbeiten mit Lösungen und Projekten verwenden. Ein Sprachdienst kann basierend auf der Dateierweiterung oder dem Inhalt eines geöffneten Dokuments selbst aktiviert werden, obwohl dieser Sprachdienst für "lose Datei" auf die Hervorhebung der Syntax beschränkt ist. Zusätzliche Informationen sind erforderlich, um beim Bearbeiten/Überprüfen des Quellcodes eine umfangreichere Erfahrung zu bieten. Jeder Sprachdienst verfügt über eine eigene API für die Initialisierung mit diesen zusätzlichen Kontextdaten für ein Dokument. Dies wird in der Regel von einem Projektsystem verwaltet, das eng mit dem Sprachdienst und dem Buildsystem gekoppelt ist.

Initialisierung

In einem Arbeitsbereich werden Sprachdienste durch einen ILanguageServiceProvider Erweiterungspunkt initialisiert, der sich nur auf diesen Sprachdienst spezialisiert hat und nichts über die Build-Erstellung kennt. Auf diese Weise kann ein Sprachdienstbesitzer eine einzelne Open Folder-Erweiterung verwalten, unabhängig davon, wie viele Muster innerhalb von Ordnern und Dateien zum Ausführen des Compilers während eines Builds vorhanden sind (z. B. MSBuild, Makefiles usw.). Wenn Dateien, aus denen ein Dateikontext erstellt wurde, auf dem Datenträger geändert und der Dateikontext aktualisiert wird, wird der Sprachdienstanbieter über den aktualisierten Satz von Dateikontexten benachrichtigt. Der Sprachdienstanbieter kann dann sein Modell aktualisieren.

Wenn ein Dokument im Editor geöffnet wird, berücksichtigt Visual Studio nur Sprachdienstanbieter, für die Dateikontexttypen erforderlich sind, für die ein übereinstimmender Dateikontextanbieter gefunden werden kann. Anschließend übergibt er den Dateikontext(n) vom entsprechenden Anbieter(n) an den ausgewählten Sprachdienstanbieter ILanguageServiceProvider.InitializeAsync. Was der Sprachdienstanbieter mit diesen Dateikontextdaten tut, ist ein Implementierungsdetail des Sprachdienstanbieters, aber die erwartete Benutzererfahrung ist ein umfangreicherer Sprachdienst für dieses geöffnete Dokument.

Verwenden von ILanguageServiceProvider

Der Sprachdienst wird benachrichtigt, wenn ein Dateikontext mit einem ContextType erstellt wird, der mit einem der SupportedContextTypes-Werte des Sprachserverexport-Attributs übereinstimmt.

Um einen Sprachdienst zu unterstützen, benötigt eine Erweiterung Folgendes:

  • Ein eindeutiger Guid. Dies wird für SupportedContextTypes Attributargumente und in einem FileContext Objekt verwendet.
  • Sprachdateikontext
    • Anbieterfactory
      • ExportFileContextProviderAttribute Attribut mit dem oben eindeutig generierten Guid in SupportedContextTypes
      • Implementiert IWorkspaceProviderFactory<IFileContextProvider>
    • Anbieterimplementierung von IFileContextProvider.GetContextsForFileAsync
      • Erstellen Sie ein neues FileContext mit dem Konstruktorargument contextType als das eindeutig generierte Guid.
      • Verwenden Sie die Eigenschaft Context von FileContext, um zusätzliche Daten für ILanguageServiceProvider bereitzustellen.
  • Sprachdienst
    • Anbieterfactory
      • ExportLanguageServiceProvider Attribut mit dem oben eindeutig generierten Guid in SupportedContextTypes
      • Implementiert IWorkspaceProviderFactory<ILanguageServiceProvider>
    • Anbieter
      • Implementiert ILanguageServiceProvider
      • Verwenden Sie ILanguageServiceProvider.InitializeAsync, um Sprachdienste für die bereitgestellten Argumente zu aktivieren, wenn eine Datei geöffnet wird.
      • Verwenden Sie ILanguageServiceProvider.UninitializeAsync, um Sprachdienste für die Argumente zu deaktivieren, wenn eine Datei geschlossen wird.

Warnung

Die ILanguageServiceProvider Methoden können vom Arbeitsbereich im Hauptthread aufgerufen werden. Erwägen Sie die Planung von Arbeiten in einem anderen Thread, um die Einführung von UI-Verzögerungen zu vermeiden.

Language Server-Protokoll

Die Microsoft.VisualStudio.Workspace.* APIs sind nicht die einzige Möglichkeit, Ihren Sprachdienst in "Ordner öffnen" zu aktivieren. Eine weitere Option besteht darin, einen Sprachserver zu verwenden. Weitere Informationen finden Sie im Language Server-Protokoll.

  • ILanguageServiceProvider wird aufgerufen, wenn eine Datei mit übereinstimmenden Dateitypen zur Bearbeitung geöffnet oder geschlossen wird.