Extensiones y compatibilidad con el ecosistema

Uno de los objetivos principales de Visual Studio Live Share es permitir a los desarrolladores colaborar entre sí, desde la comodidad de sus herramientas favoritas y altamente personalizadas. De este modo, las interacciones ad hoc pueden producirse con frecuencia, mientras permanecen visualmente familiares y ergonómicas, independientemente de lo que esté ayudando. Para ello, es fundamental que los participantes dentro de una sesión de colaboración puedan seguir usando las extensiones que admiten sus preferencias personales y flujos de trabajo (por ejemplo, temas de color e iconos, enlaces clave, mejora de productividad del editor).

Además, para que el acto de unirse a una sesión de colaboración sea lo más instantáneo posible, mientras que permanece muy productivo, el objetivo de Visual Studio Live Share es permitir que los invitados aprovechen automáticamente las herramientas específicas del proyecto que ha compartido su host. De este modo, simplemente puede hacer clic en un vínculo, iniciar la herramienta que prefiera y empezar a colaborar, sin ninguna configuración adicional. Para lograr esto, es fundamental que las extensiones, que potencian el flujo de trabajo principal de edición, compilación y depuración, sean transparentemente "remotas" del host al invitado, de modo que cosas como la finalización automática, la definición y la depuración "solo funcionan".

En este documento se describe el estado conocido actual del amplio ecosistema de extensiones, así como un "cuadro de mandos" para los objetivos mencionados anteriormente. Si encuentra una extensión que no cumple estos criterios y es fundamental para su flujo de trabajo personal, háganoslo saber.

Extensiones específicas del usuario

Las extensiones que admiten personalizaciones específicas del usuario deben funcionar para el host y deben funcionar para todos los invitados. Si una extensión no funciona correctamente para el host, sería una regresión y es probable que se produzca un error en Visual Studio Live Share (por favor , abra un problema si ve uno). Si una extensión no se comporta según lo esperado para un invitado, puede requerir cambios en la propia extensión y trabajaremos con el ecosistema para abordar o mejorar estos escenarios.

Visual Studio Code

Categoría Por ejemplo ¿Se admiten invitados? ¿Colaboración?
Temas de color One Dark Pro, Output Colorizer, Rainbow String, Colored Regions, Indented Block Highlight, Todo Highlight, Bracket Pair Colorizer N/D
Conjuntos de iconos vscode-icons, Iconos clásicos de Visual Studio N/D
Enlaces de teclado Vim, IntelliJ IDEA Keybindings, Emacs Friendly Keymap N/D
Fragmentos de código Fragmentos de código de Angular v5, fragmentos de código HTML, iconos SVG, encabezado de archivo N/A1
Organization Configuración Sync, Project Manager, Timeit, Checkpoints, TODO Parser, Favoritos (), Marcadores (❌❌) 2 N/A3
Productividad GitLens, Etiqueta de cambio automático de nombre, Esquema de código, Resaltado de color, Selección de incremento, Corchetes, Vista previa de imágenes, Asistente json (mantener el puntero), Selector de colores, Copiar word en cursor, CodeMetrics (CodeLens), Coautores de Git, JavaScript Booster (CodeActions), Registro de consola Turbo, Goto Next/Previous Member, Auto-scroll, NPM Importar versión (❌), Costo de importación (❌) 2 3
REPLs Cliente REST, Ejecutor de código, Quokka.js, R 4 3
Administradores de recursos mssql, ftp-simple, Azure Functions, Docker, Brew Services 5 3

1A menos que un usuario ya estuviera familiarizado con un fragmento de código, no esperaría que estuviera disponible y, por lo tanto, hacerlo compartido no tiene sentido necesariamente.

2Estas categorías de extensión son tan diversas, que es imposible decir que todas funcionan. Sin embargo, en teoría, deberían, y realizaremos un seguimiento de las claves que no lo hacen.

3Estas categorías de extensión pueden beneficiarse de experiencias colaborativas, por lo que necesitamos comentarios de los usuarios finales para saberlo.

4Estos requieren que el invitado tenga instaladas las herramientas en tiempo de ejecución (por ejemplo, Node.js) y funcione ejecutando código localmente.

5Estos funcionan conectándose a un servidor de algún tipo y pueden funcionar con servidores centralizados, servidores que el invitado ha compartido.

Extensiones específicas del proyecto

Las extensiones instaladas por host, que admiten la edición principal, la compilación y la depuración de una aplicación, y que son específicas de un lenguaje, plataforma, biblioteca o SDK, deben estar disponibles automáticamente para los invitados, sin necesidad de instalar nada. De este modo, los hosts pueden configurar su entorno para admitir el desarrollo productivo de un proyecto y permitir que sus invitados se unan al instante, sin requisitos previos adicionales. Dado que las extensiones específicas del proyecto no son subjetivas ni personales de ninguna manera, se pueden compartir de forma determinista desde host a invitado, sin afectar al entorno familiar de nadie.

Además, para admitir extensiones específicas del proyecto que ha instalado un invitado, pero el host no lo hace, lo ideal sería proporcionar una experiencia degradada y funcional (por ejemplo, obtener intellisense de un solo archivo, poder dar formato a un documento).

Categoría Por ejemplo ¿Compartido? ¿Se admiten invitados?
Gramáticas o resaltado de sintaxis Fish Shell, Nginx, Vetur, DotEnv, ES6 String HTML, Todo+, Rainbow CSV
Language Services YAML, Path IntelliSense, ARM 1 2
Esquemas JSON Funciones de Azure
Linters ESLint, Markdownlint, Corrector ortográfico de código, PHPCS 2
Formateadores Más bonito, Embellecimiento 2
Depuradores Python, Depurador para Chrome 3 4
Ejecutores de pruebas Ejecutor de pruebas de Java, Barra lateral de Mocha, Ejecutor de Postman, Ejecutor Jest, Neptuno 5 2
Vista previa de archivos personalizados SvG Preview, GraphViz, Markdown Image Size
Generadores de archivos o proyectos Generador de proyectos de C/C++ de Azure Functions 6
Proveedores de control de código fuente SVN, Hg

1Actualmente solo C# y JavaScript/TypeScript.

2Solo admitiría el documento activo actual, ya que los invitados no tienen acceso a archivos locales.

3La experiencia de depuración principal se comparte, sin embargo, los servidores iniciados no se reenvía automáticamente.

4Los invitados no tienen una copia local de la aplicación y, por lo tanto, la aplicación en ejecución y las sesiones de depuración deben iniciarse en el equipo del host.

5La salida de una ejecución de prueba requeriría que los terminales, paneles de salida y errores resultantes también se compartiese con invitados.

6Casi todos estos usarían el módulo Node.js fs directamente para crear archivos, lo que no funcionaría.

Problemas conocidos

Los siguientes son problemas de extensión conocidos actualmente, que podrían impedir que funcionen para invitados en el contexto de una sesión de colaboración (junto con sus soluciones alternativas) y, por lo tanto, podrían afectar a su flujo de trabajo:

Visual Studio Code

Problema Motivo Solución alternativa
Usar el módulo Node.js fs para detectar o leer archivos (por ejemplo, un archivo de configuración) o enumerar directorios (y no es un servicio de lenguaje). Los invitados no tienen acceso a archivos locales. 1. Degradar correctamente la experiencia del usuario (si es posible).

2. Use las API y findFiles del openTextDocument área de trabajo para leer y enumerar archivos.
Uso del módulo Node.js fs para crear o escribir archivos Igual que lo anterior N/A Puede usar la openTextDocument(Uri) API para crear un untitled archivo, pero no puede guardarlo directamente en el sistema de archivos, en una ruta de acceso específica.
Dependiendo de una biblioteca o herramienta agrupada por proyectos Igual que lo anterior 1. Agrupación de una versión de reserva de la dependencia con la extensión

2. Admitir la instalación global para desbloquear a los invitados si deciden instalarlo explícitamente.

3. Remota el estado o la acción si es posible, ya que el host tendría las dependencias adecuadas disponibles.
Uso del módulo Node.js fs para crear un directorio Igual que lo anterior N/D
Restricción de la funcionalidad a documentos que usan el file esquema. Los archivos del lado del invitado usan el vsls esquema . Adición de compatibilidad con vsls documentos (ejemplo)
Uso del Uri.file método o Uri.fsPath/TextDocument.fileName miembros para serializar o analizar los URI Igual que lo anterior Use Uri.parse y Url.toString() , en su lugar, que mantenga y respete los esquemas de archivos (ejemplo)
Uso del workspace.openTextDocument método con una ruta de acceso de archivo en lugar de Uri Igual que lo anterior Proporcione una Uri instancia en lugar de una cadena de ruta de acceso de archivo sin formato (ejemplo)
Uso de la workspace.rootPath propiedad para detectar la presencia de un área de trabajo La workspace.rootPath propiedad llama Uri.fsPath a en la primera workspaceFolder de , workspaceque tiene el mismo problema mencionado anteriormente. Use la workspace.workspaceFolders propiedad para detectar la presencia de un área de trabajo en su lugar y, si es necesario, examine cada workspaceFolderUri.scheme una para determinar si es local o no.
No especificar un esquema de documento al registrar servicios de idioma (ya sea a través de , LanguageCliento los languages.register* métodos) Los invitados reciben los resultados del servicio de idioma de sus extensiones locales y, por tanto, si ambos participantes tienen instalada la misma extensión de servicio de idioma, los invitados verán entradas duplicadas para ciertas cosas (por ejemplo, finalización automática, acciones de código). Restringir los servicios de idioma solo a file esquemas y untitled (ejemplo)
No comprobar el documento antes de Uri.scheme rellenar un DiagnosticCollection elemento para él Igual que lo anterior Diagnostics Generar solo para documents cuyo Uri.scheme === file (ejemplo)
No se comprueba el esquema del área de trabajo al devolver Tasks desde un personalizado TaskProvider Los invitados muestran todas las tareas remotas y locales y, por lo tanto, mostrarían duplicados si ambos participantes tuvieran instalada la misma extensión. Solo se devuelve Tasks para WorkspaceFoldercuyos (fileUri.scheme === ejemplo)

Consulte también

¿Tiene algún problema? Consulte la solución de problemas o envíe sus comentarios.