Compartir a través de


Compatibilidad con extensiones y 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 muy personalizadas. De este modo, las interacciones ad hoc pueden producirse con frecuencia, sin dejar de ser visualmente familiares y ergonómicas, independientemente de en qué se esté ayudando. Para lograrlo, es fundamental que los participantes en una sesión de colaboración puedan seguir utilizando las extensiones que se adapten a sus preferencias personales y flujos de trabajo (por ejemplo, temas de color/iconos, enlaces de teclas, potenciadores de la 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, sin dejar de ser altamente productivo, el objetivo de Visual Studio Live Share es permitir que los invitados aprovechen automáticamente las herramientas específicas del proyecto que su anfitrión ha compartido. De este modo, basta con hacer clic en un vínculo, iniciar la herramienta elegida y empezar a colaborar, sin necesidad de configuraciones adicionales. Para lograrlo, es fundamental que las extensiones, que impulsan el flujo de trabajo central de edición, creación y depuración, estén "remotas" de forma transparente desde el anfitrión al invitado, de modo que cosas como la finalización automática, la definición de destino y la depuración "simplemente funcionen".

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 anfitrión y deberían funcionar para todos los invitados. Si una extensión no funciona correctamente para el anfitrión, se trataría de una regresión, y es probable que se trate de un error en Visual Studio Live Share (presente una incidencia si detecta una). Si una extensión no se comporta como se espera para un invitado, puede requerir cambios en la propia extensión, y trabajaremos con el ecosistema para abordar/mejorar estos escenarios.

Visual Studio Code

Category Por ejemplo ¿Compatible para invitados? ¿Colaborativa?
Temas de color One Dark Pro, Output Colorizer, Rainbow String, Colored Regions, Indented Block Highlighting, 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 Angular v5, Fragmentos de HTML, Iconos de SVG, Encabezado de archivo N/A 1
Organización Sincronización de configuración, Administrador de proyectos, Timeit, Puntos de control, Analizador TODO, Favoritos (❌), Marcadores (❌) 2 N/A 3
Productividad GitLens, Cambio automático de nombre de etiquetas, Esquema de código, Resaltado de color, Incrementar selección, Sistema de corchetes, Vista previa de imágenes, Aplicación auxiliar de JSON (Mover el puntero), Selector de color, Copiar palabra en cursor, CodeMetrics (CodeLens), Coautores de Git, Impulsor de JavaScript (CodeActions), Turbo Console Log, Ir a miembro siguiente/anterior, Desplazamiento automático, Versión de importación de NPM (❌), Coste 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

1 A menos que un usuario ya esté familiarizado con un fragmento, no esperará que esté disponible y, por tanto, hacer que se compartan no tiene necesariamente sentido.

2 Estas categorías de extensiones son tan diversas que es imposible decir que todas funcionan. Sin embargo, en teoría, deberían, y vamos a realizar un seguimiento de las principales que no lo hacen.

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

4 Requieren que el invitado tenga instaladas las herramientas de ejecución (por ejemplo, Node.js) y funcionan ejecutando el código localmente.

5 Funcionan conectándose a un servidor de algún tipo, y pueden funcionar tanto con servidores centralizados como con servidores compartidos por el invitado.

Extensiones específicas del proyecto

Las extensiones instaladas por el anfitrión, que admiten la edición, compilación y depuración básicas de una aplicación, y que son específicas de un lenguaje/plataforma/biblioteca/SDK, deberían estar disponibles automáticamente para los invitados, sin necesidad de que instalen nada. De este modo, los anfitriones 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 de un proyecto no son subjetivas ni personales en modo alguno, pueden compartirse de forma determinista de anfitrión a invitado, sin afectar al entorno familiar de nadie.

Además, para admitir extensiones específicas del proyecto que un invitado tiene instaladas, pero que el anfitrión no, lo ideal sería que ofrecieran una experiencia degradada, pero funcional (por ejemplo, obtener intellisense de archivo único, poder dar formato un documento).

Category Por ejemplo ¿Compartida? ¿Compatible para invitados?
Gramática o resaltado de sintaxis Fish Shell, Nginx, Vetur, DotEnv, ES6 String HTML, Todo+, Rainbow CSV
Servicios de lenguaje YAML, Path Intellisense, ARM 1 2
Esquemas JSON Funciones de Azure
Linters ESLint, Markdownlint, Corrector ortográfico de código, PHPCS 2
Formateadores Prettier, Beautify 2
Depuradores Python, Depurador para Chrome 3 4
Ejecutores de pruebas Ejecutor de pruebas de Java, Barra lateral de Mocha, Ejecutor de Jest, Neptune 5 2
Vista previa de archivos personalizados Vista previa de SVG, GraphViz, Markdown de tamaño de imagen
Generadores de archivos o proyectos Azure Functions, Generador de proyectos de C/C++ 6
Proveedores de control de código fuente SVN, Hg

1 Actualmente solo C# y JavaScript/TypeScript.

2 Solo sería compatible con el documento activo actual, ya que los invitados no tienen acceso local a los archivos.

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

4 Los invitados no disponen de una copia local de la aplicación, por lo que la aplicación en ejecución y las sesiones de depuración deben iniciarse en el equipo anfitrión.

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

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

Problemas conocidos

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

Visual Studio Code

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

2. Usar las API de área de trabajo openTextDocument y findFiles para leer y enumerar archivos.
Usar el módulo fs de Node.js para crear o escribir archivos Lo mismo que antes. N/A Puede usar la API openTextDocument(Uri) para crear un archivo untitled, 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 Lo mismo que antes. 1. Agrupar 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. Aplicar de forma remota el estado o la acción si es posible, ya que el anfitrión tendría las dependencias adecuadas disponibles.
Usar el módulo fs de Node.js para crear un directorio Lo mismo que antes. N/D
Restringir la funcionalidad a documentos que usan el esquema file. Los archivos del lado del invitado usan el esquema vsls. Añadir compatibilidad con documentos vsls (ejemplo)
Usar el método Uri.file o los miembros Uri.fsPath/TextDocument.fileName para serializar o analizar los URI Lo mismo que antes. Usar Uri.parse y Url.toString() , en su lugar, que mantienen y respetan los esquemas de archivos (ejemplo)
Usar el método workspace.openTextDocument con una ruta de acceso de archivo en lugar de Uri Lo mismo que antes. Proporcionar una instancia de Uri en lugar de una cadena de ruta de acceso de archivo sin formato (ejemplo)
Usar la propiedad workspace.rootPath para detectar la presencia de un área de trabajo La propiedad workspace.rootPath llama a Uri.fsPath en la primera workspaceFolder del workspace, que tiene el mismo problema mencionado anteriormente. Usar la propiedad workspace.workspaceFolders para detectar la presencia de un área de trabajo en su lugar y, si es necesario, examinar Uri.scheme de la workspaceFolder para determinar si es local o no
No especificar un esquema de documento al registrar servicios de idioma (ya sea a través de un LanguageClient o de los métodos languages.register*) Los invitados reciben los resultados del servicio de idiomas tanto de sus extensiones locales como del anfitrión y, por lo tanto, si ambos participantes tienen instalada la misma extensión del servicio de idiomas, 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 esquemas file y untitled (ejemplo)
No comprobar el Uri.scheme de un documento antes de rellenar una DiagnosticCollection para él Lo mismo que antes. Generar solo Diagnostics para documents cuyo Uri.scheme === file (ejemplo)
No comprobar el esquema del área de trabajo al devolver Tasks desde un TaskProvider personalizado 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. Devolver solo Tasks para las WorkspaceFolder cuyo Uri.scheme === file (ejemplo)

Consulte también

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