Extensões e Suporte ao Ecossistema

Um dos principais objetivos do Visual Studio Live Share é permitir que os desenvolvedores colaborem uns com os outros, a partir do conforto de suas ferramentas favoritas e altamente personalizadas . Dessa forma, as interações ad-hoc podem ocorrer com frequência, mantendo-se visualmente familiares e ergonômicas, independentemente do que você está ajudando. Para conseguir isso, é fundamental que os participantes de uma sessão de colaboração possam continuar usando quaisquer extensões que suportem suas preferências pessoais e fluxos de trabalho (por exemplo, temas de cores/ícones, ligações de chaves, melhoradores de produtividade do editor).

Além disso, para tornar o ato de ingressar em uma sessão de colaboração o mais instantâneo possível, enquanto permanece altamente produtivo, o objetivo do Visual Studio Live Share é permitir que os convidados aproveitem automaticamente as ferramentas específicas do projeto que seu host compartilhou. Dessa forma, você pode simplesmente clicar em um link, iniciar sua ferramenta de escolha e começar a colaborar, sem qualquer configuração extra. Para conseguir isso, é fundamental que as extensões, que alimentam o fluxo de trabalho principal de edição, compilação e depuração, sejam transparentemente "remotas" do host para o convidado, para que coisas como auto-conclusão, go-to-definition e depuração "simplesmente funcionem".

Este documento cobre o estado atual conhecido para o vasto ecossistema de extensão, bem como um "scorecard" para os objetivos acima mencionados. Se você encontrar uma extensão que não atenda a esses critérios e seja crítica para seu fluxo de trabalho pessoal, entre em contato conosco!

Extensões específicas do usuário

As extensões que oferecem suporte a personalizações específicas do usuário devem funcionar para o host e devem funcionar para todos os convidados. Se uma extensão não funcionar corretamente para o host, isso seria uma regressão e provavelmente é um bug no Visual Studio Live Share (registre um problema se você vir um!). Se uma extensão não se comportar como esperado para um convidado, ela pode exigir alterações na própria extensão, e trabalharemos com o ecossistema para abordar/melhorar esses cenários.

Visual Studio Code

Categoria Exemplo(s) Suportado por convidados? Colaborativo?
Temas de Cores Um Dark Pro, Colorizador de Saída, Corda Arco-íris, Regiões Coloridas, Realce de Bloco Recuado, Todo Highlight, Colorizador de Par de Suporte N/A
Conjuntos de ícones vscode-icons, ícones clássicos do Visual Studio N/A
Associações de teclas Vim, IntelliJ IDEA Keybindings, Emacs Friendly Keymap N/A
Snippets Trechos Angular v5, Trechos HTML, Ícones SVG, Cabeçalho de Arquivo N/A1
Organização Sincronização de configurações, Gerente de projeto, Timeit, Pontos de verificação, Analisador TODO, Favoritos (), Favoritos ()❌❌ 2 N/A3
Produtividade GitLens, Auto-Rename Tag, Contorno de Código, Destaque de Cor, Seleção de Incremento, Colcheteer, Visualização de Imagem, Auxiliar JSON (Pairar), Seletor de Cores, Copiar Word no Cursor, CodeMetrics (CodeLens), Coautores do Git, JavaScript Booster (CodeActions), Log do Console Turbo, Membro Seguinte/Anterior, Rolagem automática, NPM Versão de Importação (), Custo de Importação (❌❌) 2 3
REPLs Cliente REST, Code Runner, Quokka.js, R 4 3
Gerentes de Recursos mssql, ftp-simple, Azure Functions, Docker, Brew Services 5 3

1 A menos que um usuário já estivesse familiarizado com um trecho, ele não esperaria que ele estivesse disponível e, portanto, torná-lo compartilhado não necessariamente faz sentido.

2 Essas categorias de extensão são tão diversas, que é impossível dizer que todas funcionam. No entanto, em teoria, eles deveriam, e vamos rastrear os principais que não o fazem.

3 Essas categorias de extensão podem se beneficiar de experiências colaborativas e, portanto, precisamos do feedback do usuário final para saber disso!

4 Eles exigem que o convidado tenha as ferramentas de tempo de execução instaladas (por exemplo, Node.js) e funcione executando código localmente.

5 Eles funcionam conectando-se a um servidor de algum tipo, e podem funcionar com servidores centralizados, servidores que o convidado compartilhou.

Extensões específicas do projeto

As extensões instaladas pelo host, que suportam a edição, construção e depuração principais de um aplicativo e são específicas para uma linguagem/plataforma/biblioteca/SDK, devem estar automaticamente disponíveis para os convidados, sem exigir que eles instalem nada. Dessa forma, os hosts podem configurar seu ambiente para apoiar o desenvolvimento produtivo de um projeto e permitir que seus convidados se juntem a eles instantaneamente, sem pré-requisitos adicionais. Como as extensões específicas do projeto não são subjetivas ou pessoais de forma alguma, elas podem ser compartilhadas deterministicamente de host para convidado, sem afetar o ambiente familiar de ninguém.

Além disso, para oferecer suporte a extensões específicas do projeto que um convidado instalou, mas o host não tem, eles idealmente forneceriam uma experiência degradada, mas funcional (por exemplo, obter intellisense de arquivo único, ser capaz de formatar um documento).

Categoria Exemplo(s) Compartilhado? Suportado por convidados?
Realce de gramáticas / sintaxe Concha de peixe, Nginx, Vetur, DotEnv, ES6 String HTML, Todo+, Rainbow CSV
Serviços Linguísticos YAML, Caminho Intellisense, ARM 1 2
Esquemas JSON Azure Functions
Linters ESLint, Markdownlint, Verificador Ortográfico de Código, PHPCS 2
Formatadores Mais bonito, embelezar 2
Depuradores Python, Depurador para Chrome 3 4
Corredores de Teste Java Test Runner, Mocha Sidebar, Postman Runner, Jest Runner, Netuno 5 2
Visualizadores de arquivos personalizados SVG Preview, GraphViz, Tamanho da imagem de Markdown
Geradores de arquivos/projetos Azure Functions, Gerador de projetos C/C++ 6
Provedores de controle do código-fonte SVN, Hg

1 Atualmente apenas C# e JavaScript/TypeScript.

2 Suportaria apenas o documento ativo atual, já que os convidados não têm acesso ao arquivo local.

3 A experiência de depuração principal é compartilhada, no entanto, nenhum servidor iniciado é encaminhado automaticamente.

4 Os convidados não têm uma cópia local do aplicativo e, portanto, o aplicativo em execução e quaisquer sessões de depuração precisam ser iniciados na máquina do host.

5 A saída de uma execução de teste exigiria que quaisquer terminais, painéis de saída e erros resultantes também fossem compartilhados com convidados.

6 Quase todos eles usariam o módulo Node.js fs diretamente para criar arquivos, o que não funcionaria.

Problemas conhecidos

A seguir estão problemas de extensão conhecidos no momento, que podem impedi-los de trabalhar para convidados no contexto de uma sessão de colaboração (juntamente com suas soluções alternativas) e, portanto, podem afetar seu fluxo de trabalho:

Visual Studio Code

Problema Motivo Solução alternativa
Usando o módulo Node.js fs para detectar/ler arquivos (por exemplo, um arquivo de configuração) ou enumerar diretórios (e você não é um serviço de idioma). Os hóspedes não têm acesso a arquivos locais. 1. Degrade graciosamente a experiência do usuário (se possível).

2. Use as openTextDocument APIs e espaço de trabalho para ler e findFiles enumerar arquivos.
Usando o módulo Node.js fs para criar ou gravar arquivos O mesmo que acima N/D Você pode usar a openTextDocument(Uri) API para criar um arquivo, mas não pode salvá-lo diretamente no sistema de arquivos, em um untitled caminho específico.
Dependendo de uma biblioteca ou ferramenta empacotada pelo projeto O mesmo que acima 1. Agrupe uma versão de fallback da dependência com a extensão

2. Suporte a instalação global para desbloquear convidados se eles optarem por instalá-lo explicitamente.

3. Remoto o estado/ação, se possível, uma vez que o host teria as dependências corretas disponíveis.
Usando o módulo Node.js fs para criar um diretório O mesmo que acima N/A
Restringindo a funcionalidade a documentos que usam o file esquema. Arquivos do lado do hóspede usam o vsls esquema. Adicionar suporte para vsls documentos (exemplo)
Usando o Uri.file método e/ou Uri.fsPath/TextDocument.fileName membros para serializar/analisar URIs O mesmo que acima Use Uri.parse e, em vez disso, que mantenha e Url.toString() respeite esquemas de arquivos (exemplo)
Usando o workspace.openTextDocument método com um caminho de arquivo em vez de um Uri O mesmo que acima Fornecer uma instância em vez de uma Uri cadeia de caracteres de caminho de arquivo bruto (exemplo)
Usando a propriedade para detectar a workspace.rootPath presença de um espaço de trabalho O workspace.rootPath imóvel aciona Uri.fsPath o primeiro workspaceFolder do workspace, que tem o mesmo problema mencionado acima Use a propriedade para detectar a workspace.workspaceFolders presença de um espaço de trabalho e, se necessário, examine cada workspaceFolderum para Uri.scheme determinar se é local ou não
Não especificar um esquema de documento ao registrar serviços linguísticos (por meio de um LanguageClient, ou dos languages.register* métodos) Os convidados recebem os resultados do serviço de idioma de suas extensões locais e do host e, portanto, se ambos os participantes tiverem a mesma extensão de serviço de idioma instalada, os convidados verão entradas duplicadas para determinadas coisas (por exemplo, preenchimento automático, ações de código) Restringir os serviços linguísticos a apenas file e untitled esquemas (exemplo)
Não verificar um documento antes Uri.scheme de preencher um DiagnosticCollection para ele O mesmo que acima Gerar Diagnostics somente para documents quem Uri.scheme === file (exemplo)
Não verificar o esquema de espaço de trabalho ao retornar Tasks de um esquema personalizado TaskProvider Os convidados exibem todas as tarefas remotas e locais e, portanto, exibiriam duplicatas se ambos os participantes tivessem a mesma extensão instalada Retornar Tasks somente para WorkspaceFolders cujo Uri.scheme === file (exemplo)

Confira também

Está tendo problemas? Confira Solução de problemas ou envie comentários.