lewiswigmore/agent-skills

Guia em português para desenvolvimento de extensões do VS Code — desde o scaffolding até a publicação no Marketplace. Aborda padrões de Webview, segurança CSP, TreeView, testes, empacotamento, personalização de IA e solução de problemas. Adaptado de aktsmm/agent-skills com correções para APIs do VS Code 1.74+.

O que é agent-skills?

Esta skill fornece um guia abrangente e em português para desenvolvedores que desejam criar, desenvolver e publicar extensões para o Visual Studio Code. Ela cobre todo o ciclo de vida do desenvolvimento, desde a criação do projeto com ferramentas como `yo code` até a publicação no Marketplace, incluindo práticas recomendadas de estrutura de projeto, empacotamento e testes. A skill é especialmente útil para desenvolvedores que trabalham com APIs modernas do VS Code (1.74+) e oferece referências detalhadas para tópicos avançados como Webviews com segurança CSP, TreeViews, personalização de IA e solução de problemas comuns. Além disso, inclui exemplos de código prontos para uso, como um sistema centralizado de notificações, e dicas de consistência de nomenclatura para evitar conflitos.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add lewiswigmore/agent-skills

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Guia de Extensão para VS Code

Crie, desenvolva e publique extensões para o VS Code.

Quando Usar

  • Extensão do VS Code, desenvolvimento de extensão, plugin vscode
  • Criar uma nova extensão do VS Code do zero
  • Adicionar comandos, atalhos de teclado ou configurações a uma extensão
  • Publicar no Marketplace do VS Code

Início Rápido

# Estruturar nova extensão (recomendado)
npm install -g yo generator-code
yo code

# Ou configuração manual mínima
mkdir my-extension && cd my-extension
npm init -y && npm install -D typescript @types/vscode

Estrutura do Projeto

my-extension/
├── package.json          # Manifesto da extensão (CRÍTICO)
├── src/extension.ts      # Ponto de entrada
├── out/                  # JS compilado (gitignore)
├── images/icon.png       # PNG 128x128 para o Marketplace
└── .vscodeignore         # Excluir arquivos do VSIX

Compilação e Empacotamento

npm run compile      # Compilar uma vez
npm run watch        # Modo de observação (F5 para iniciar depuração)
npx @vscode/vsce package   # Cria o arquivo .vsix

Critérios de Conclusão

  • Extensão ativa sem erros
  • Todos os comandos registrados e funcionando
  • Tamanho do pacote < 5MB (use .vscodeignore)
  • README.md inclui links do Marketplace/GitHub

Solução Rápida de Problemas

SintomaCorreção
Extensão não carregaVerifique activationEvents (detectado automaticamente desde VS Code 1.74 para comandos/views contribuídos)
Comando não encontradoCorresponda o ID do comando em package.json/código
Atalho não funcionaRemova a cláusula when, verifique conflitos
TópicoReferência
Personalização de IAreferences/ai-customization.md
Prompts de Revisãoreferences/code-review-prompts.md
Exemplos de Códigoreferences/code-samples.md
TreeViewreferences/treeview.md
Webviewreferences/webview.md
Testesreferences/testing.md
Publicaçãoreferences/publishing.md
Solução de Problemasreferences/troubleshooting.md

Melhores Práticas

Consistência de Nomenclatura

Unifique o nome do pacote, chaves de configuração, IDs de comando e IDs de visualização antes de publicar:

ItemExemplo
Nome do pacotecopilot-scheduler
Chave de configuraçãocopilotScheduler.enabled
ID do comandocopilotScheduler.createTask
ID da visualizaçãocopilotSchedulerTasks

Tratamento Centralizado de Notificações

type NotificationMode = "sound" | "silentToast" | "silentStatus";

function getNotificationMode(): NotificationMode {
  const config = vscode.workspace.getConfiguration("myExtension");
  return config.get<NotificationMode>("notificationMode", "sound");
}

function notifyInfo(message: string, timeoutMs = 4000): void {
  const mode = getNotificationMode();
  switch (mode) {
    case "silentStatus":
      vscode.window.setStatusBarMessage(message, timeoutMs);
      break;
    case "silentToast":
      void vscode.window.withProgress(
        { location: vscode.ProgressLocation.Notification, title: message },
        async () => {},
      );
      break;
    default:
      void vscode.window.showInformationMessage(message);
  }
}

function notifyError(message: string, timeoutMs = 6000): void {
  const mode = getNotificationMode();
  if (mode === "silentStatus") {
    vscode.window.setStatusBarMessage(`⚠ ${message}`, timeoutMs);
    console.error(message);
    return;
  }
  void vscode.window.showErrorMessage(message);
}

Exponha uma configuração notificationMode para que os usuários possam controlar como as notificações são exibidas.

Habilidades Relacionadas