Extensions et prise en charge de l’écosystème

L’un des principaux objectifs de Visual Studio Live Share est de permettre aux développeurs de collaborer entre eux, du confort de leurs outils préférés et hautement personnalisés. De cette façon, les interactions ad hoc peuvent se produire fréquemment, tout en restant visuellement familières et ergonomiques, indépendamment de ce que vous aidez. Pour ce faire, il est essentiel que les participants au sein d’une session de collaboration puissent continuer à utiliser toutes les extensions qui prennent en charge leurs préférences personnelles et leurs flux de travail (par exemple, thèmes couleur/icônes, liaisons clés, améliorations de productivité de l’éditeur).

En outre, pour que l’acte de rejoindre une session de collaboration aussi rapidement que possible, tout en restant hautement productif, l’objectif de Visual Studio Live Share est de permettre aux invités de tirer automatiquement parti des outils spécifiques au projet que leur hôte a partagés. De cette façon, vous pouvez simplement cliquer sur un lien, lancer votre outil de choix et commencer à collaborer, sans aucune configuration supplémentaire. Pour ce faire, il est essentiel que les extensions, qui alimentent le flux de travail principal d’édition, de génération et de débogage, soient « distantes » de l’hôte vers l’invité, de sorte que les éléments tels que la saisie semi-automatique, la définition et le débogage « fonctionnent simplement ».

Ce document couvre l’état connu actuel de l’écosystème vaste d’extension, ainsi qu’une « carte de performance » pour les objectifs mentionnés ci-dessus. Si vous rencontrez une extension qui ne répond pas à ces critères et est critique pour votre flux de travail personnel, faites-nous savoir !

Extensions spécifiques à l’utilisateur

Les extensions qui prennent en charge les personnalisations spécifiques à l’utilisateur doivent fonctionner pour l’hôte et doivent fonctionner pour tous les invités. Si une extension ne fonctionne pas correctement pour l’hôte, ce serait une régression et est probablement un bogue dans Visual Studio Live Share (envoyez un problème si vous en voyez un!). Si une extension ne se comporte pas comme prévu pour un invité, elle peut nécessiter des modifications dans l’extension elle-même, et nous allons travailler avec l’écosystème pour résoudre/améliorer ces scénarios.

Visual Studio Code

Catégorie Exemple(s) Pris en charge par l’invité ? Collaboration?
Thèmes de couleur One Dark Pro, coloriseur de sortie, chaîne arc-en-ciel, régions colorées, mise en surbrillance de bloc mis en retrait, mise en surbrillance de todo, coloriseur de paire de crochets N/A
Jeux d’icônes vscode-icons, Icônes Visual Studio Classic N/A
Combinaisons de touches Vim, IntelliJ IDEA Keybindings, Emacs Friendly Keymap N/A
Extraits de code Extraits de code Angular v5, extraits HTML, icônes SVG, en-tête de fichier N/A1
Organisation Synchronisation des paramètres, Gestionnaire de projets, Timeit, Points de contrôle, Analyseur TODO, Favoris (❌), Signets (❌) 2 N/A3
Productivité GitLens, balise de renommage automatique, contour du code, mise en surbrillance des couleurs, sélection incrémentielle, crochet, aperçu de l’image, aide JSON (pointage), sélecteur de couleurs, Copier Word dans le curseur, CodeMetrics (CodeLens), Co-auteurs Git, JavaScript Booster (CodeActions), Journal de la console Turbo, Goto Next/Previous Member, Défilement automatique, NPM Importer la version (❌), coût d’importation (❌) 2 3
REPLs Client REST, Code Runner, Quokka.js, R 4 3
Gestionnaires de ressources mssql, ftp-simple, Azure Functions, Docker, Brew Services 5 3

1Sauf si un utilisateur était déjà familiarisé avec un extrait de code, il ne s’attendrait pas à ce qu’il soit disponible, et par conséquent, les rendre partagés n’a pas nécessairement de sens.

2Ces catégories d’extension sont si diverses, qu’il est impossible de dire qu’elles fonctionnent tous. Cependant, en théorie, ils devraient, et nous allons suivre les clés qui ne le font pas.

3Ces catégories d’extensions peuvent bénéficier d’expériences collaboratives, et nous avons donc besoin de commentaires des utilisateurs finaux pour savoir que!

4Ceux-ci nécessitent que l’invité dispose des outils d’exécution installés (par exemple, Node.js) et fonctionnent en exécutant du code localement.

5Ces opérations fonctionnent en se connectant à un serveur d’un certain type et peuvent fonctionner avec les serveurs centralisés, les serveurs partagés par l’invité.

Extensions spécifiques au projet

Les extensions installées par l’hôte, qui prennent en charge la modification, la génération et le débogage de base d’une application, et qui sont spécifiques à un langage/bibliothèque/bibliothèque/SDK, doivent être automatiquement disponibles pour les invités, sans avoir à installer quoi que ce soit. De cette façon, les hôtes peuvent configurer leur environnement pour prendre en charge le développement productif d’un projet et permettre à leurs invités de les joindre instantanément, sans conditions préalables supplémentaires. Étant donné que les extensions spécifiques à un projet ne sont pas subjectives ou personnelles d’une manière quelconque, elles peuvent être partagées de manière déterministe de l’hôte à l’invité, sans avoir d’impact sur l’environnement familier de toute personne.

En outre, pour prendre en charge les extensions spécifiques au projet qu’un invité a installées, mais l’hôte ne le fait pas, il offre idéalement une expérience dégradée, mais fonctionnelle (par exemple, obtention d’intellisense de fichier unique, capable de mettre en forme un document).

Catégorie Exemple(s) Partagé? Pris en charge par l’invité ?
Grammaires / Mise en surbrillance de la syntaxe Fish Shell, Nginx, Vetur, DotEnv, ES6 String HTML, Todo+, Rainbow CSV
Language Services YAML, Path IntelliSense, ARM 1 2
Schémas JSON Azure Functions
Linters ESLint, Markdownlint, Vérificateur orthographique de code, PHPCS 2
Formateurs Prettier, Beautify 2
Débogueurs Python, débogueur pour Chrome 3 4
Test Runners Java Test Runner, Mocha Sidebar, Postman Runner, Jest Runner, Neptune 5 2
Aperçus de fichiers personnalisés Svg Preview, GraphViz, Markdown Image Size
Générateurs de fichiers/projets Générateur de projets C/C++ Azure Functions 6
Fournisseurs de contrôle de code source SVN, Hg

1Actuellement uniquement C# et JavaScript/TypeScript.

2Ne prend en charge que le document actif actuel, car les invités n’ont pas d’accès aux fichiers locaux.

3L’expérience de débogage principale est partagée, mais les serveurs lancés ne sont pas automatiquement transférés.

4Les invités n’ont pas de copie locale de l’application. Par conséquent, l’application en cours d’exécution et les sessions de débogage doivent démarrer sur l’ordinateur de l’hôte.

5La sortie d’une exécution de test nécessite que tous les terminaux, volets de sortie et erreurs résultants aient également été partagés avec des invités.

6Presque tous ces éléments utiliseraient directement le module Node.js fs pour créer des fichiers, ce qui ne fonctionnerait pas.

Problèmes connus

Les problèmes d’extension connus suivants peuvent les empêcher de travailler pour les invités dans le contexte d’une session de collaboration (ainsi que leurs solutions de contournement) et peuvent donc avoir un impact sur leur flux de travail :

Visual Studio Code

Problème Motif Solution de contournement
Utilisation du module Node.js fs pour détecter/lire des fichiers (par exemple, un fichier config) ou énumérer des répertoires (et vous n’êtes pas un service de langage). Les invités n’ont pas d’accès aux fichiers locaux. 1. Dégrader avec grâce l’expérience utilisateur (si possible).

2. Utilisez les openTextDocument API et findFiles les API d’espace de travail pour lire et énumérer des fichiers.
Utilisation du module Node.js fs pour créer ou écrire des fichiers Identique à ci-dessus N/A Vous pouvez utiliser l’API openTextDocument(Uri) pour créer un untitled fichier, mais vous ne pouvez pas l’enregistrer directement dans le système de fichiers, à un chemin spécifique.
En fonction d’une bibliothèque ou d’un outil groupé de projets Identique à ci-dessus 1. Regrouper une version de secours de la dépendance avec l’extension

2. Prendre en charge l’installation globale pour débloquer les invités s’ils choisissent de l’installer explicitement.

3. Si possible, l’état/l’action à distance est distant, car l’hôte aurait les dépendances appropriées disponibles.
Utilisation du module Node.js fs pour créer un répertoire Identique à ci-dessus N/A
Restriction des fonctionnalités aux documents qui utilisent le file schéma. Les fichiers côté invité utilisent le vsls schéma. Ajouter la prise en charge des vsls documents (exemple)
Utilisation de la Uri.file méthode et/ou Uri.fsPath/TextDocument.fileName des membres pour sérialiser/analyser des URI Identique à ci-dessus Utilisez Uri.parse et Url.toString() respectez plutôt les schémas de fichiers (par exemple)
Utilisation de la workspace.openTextDocument méthode avec un chemin d’accès de fichier au lieu d’un Uri Identique à ci-dessus Fournir une Uri instance au lieu d’une chaîne de chemin d’accès de fichier brut (exemple)
Utilisation de la workspace.rootPath propriété pour détecter la présence d’un espace de travail La workspace.rootPath propriété appelle Uri.fsPath le premier workspaceFolder dans le workspace, qui a le même problème mentionné ci-dessus Utilisez la workspace.workspaceFolders propriété pour détecter la présence d’un espace de travail à la place et, si nécessaire, examinez chacune workspaceFolderUri.scheme d’elles pour déterminer s’il est local ou non.
Ne pas spécifier de schéma de document lors de l’inscription des services linguistiques (via un LanguageClientou les languages.register* méthodes) Les invités reçoivent les résultats du service linguistique à la fois de leurs extensions locales et de l’hôte, et par conséquent, si les deux participants ont la même extension de service de langue installée, les invités verront des entrées en double pour certaines choses (par exemple, saisie semi-automatique, actions de code) Restreindre les services linguistiques aux schémas et aux schémas uniquement fileuntitled (exemple)
Ne pas vérifier les Uri.scheme documents avant de remplir un DiagnosticCollection document Identique à ci-dessus Diagnostics Générer uniquement pour documents lequel Uri.scheme === file (exemple)
Ne pas vérifier le schéma d’espace de travail lors du retour Tasks d’un modèle personnalisé TaskProvider Les invités affichent toutes les tâches distantes et locales, et par conséquent, affichent des doublons si les deux participants avaient la même extension installée Tasks Retour uniquement pour WorkspaceFolders dont Uri.scheme === file (exemple)

Voir aussi

Vous rencontrez des problèmes ? Voir la section dépannage ou fournir des commentaires.