Swift e GitHub Copilot (Parte 1)

Jonatan Medina
7 min readMay 17, 2023

--

Por algum tempo, relutei em utilizar o GitHub Copilot no meu dia a dia. Sempre fui cético em relação à ferramenta. O quão vantajoso seria usá-lo? Eu vou conseguir realmente um melhor desempenho? As sugestões de códigos fazem realmente sentido? Delegar a escrita do meu código a uma inteligência artificial me faria ser menos programador? Pois é, a resposta nem sempre é binária, na maioria das vezes é tudo um grande "depende".

Todas as ferramentas dependem de como as utilizamos. Afinal, como dizem, uma Ferrari na mão de um mau motorista é só um carro veloz.

Vamos ao que interessa.

Quando me propus a começar a testar o Copilot, já me esbarrei em um obstáculo: o Xcode não tem suporte para o mesmo. Isso é um problema, usar outra IDE para programar Swift é algo desgastante e entediante. Quando digo "outra IDE", refiro-me ao VSCode, e aqui não estou depreciando o VSCode. Ele é uma excelente IDE, porém, a minha experiência com ele para Swift é ruim.

Então, como posso utilizar o Copilot para programar em Swift?

Podemos usar uma extensão não oficial do GitHub Copilot para o Xcode (CopilotForXcode) ou usar o VSCode em paralelo com Xcode.

Certo, primeiro vamos ver como utilizar no VSCode.

Um VSCode com cara de Xcode

A Apple quer permitir que o Swift seja mais utilizada em IDE`s de terceiros, fornecendo relatórios de erros e preenchimento automático de código. Por esse motivo, eles estão desenvolvendo o SourceKit-LSP com plugins prontos para IDE`s populares, como o VSCode.

Como acredito que você já tenha o XCode instalado em sua máquina, com isso, apenas adicionando a extensão do Swift, já temos nosso VSCode “entendendo” o Swift.

  • Extensão para Swift: Clique no ícone da extensão no lado esquerdo da janela / Pesquise por “Swift Language” na barra de pesquisa / Clique em “Instalar” para instalar a extensão
  • Extensão para espelhar o estilo do Xcode.

Pronto, temos um VSCode mais parecido com o nosso Xcode de cada dia (Claro, bem genérico, mas é o que temos para hoje).

Bom, feito isso já podemos escrever código em Swift no VSCode, porém, temos um problema: SourceKit-LSP é feito para desenvolvimento de Swift Packages, isso é um problema quando o projeto que queremos trabalhar são aplicativos. Por bem ou por mal, podemos dar um jeitinho de fazer as coisas funcionarem. Primeiro, vamos adicionar na raiz (mesmo nível que .xcodeproj) do projeto do nosso aplicativo, um arquivo chamado Package.swift. Por exemplo:

// swift-tools-version:5.7.1
import PackageDescription

let package = Package(
name: "MyProject",
products: [
.executable(
name: "MyProject",
targets: ["MyProject"])
],
dependencies: [
],
targets: [
.target(
name: "MyProject",
dependencies: []),
]
)

Reinicie o VSCode e pronto! Preenchimento automático adequado do UIKit.

Preenchimento automatico do UIKit funcionando + Copilot sugerindo uma implementação

Como podemos ver na imagem acima, temos o preenchimento automático do Swift e de bônus temos o Copilot sugerindo uma implementação para a minha ViewController de teste. Legal né.

Usar o Copilot é fácil e muito intuitivo, basta começar a digitar que ele vai sugerir algo.

Mas e o VSCode com Swift, funciona mesmo?

Sim e não. Muitas coisas que você consegue fazer no Xcode você não vai conseguir fazer no VSCode, isso me remete ao dilema do cobertor curto:

Cobre a cabeça e descobre os pés.

O SourceKit-LSP é feito para lidar com Swift Packages e não aplicativos, o que fizemos foi dar um jeito de rodar um aplicativo, porém o desenvolvimento fica arrastado. Por exemplo:

  • Ele não vai encontrar as declarações de suas classes e métodos.
  • Se você estiver trabalhando com Pods, ele vai ter dificuldades de entender que seus módulos são dependências.
  • Depuração em tempo real não funciona.
  • Você vai precisar do Xcode para executar seu aplicativo.
  • Você vai sentir muita falta dos atalhos do Xcode: Bom, isso você consegue personalizar no VSCode, dá um trabalhinho, porém é possível.

Confesso que não fui muito a fundo na tentativa de resolver esses problemas, preferi adotar a extensão não oficial Copilot For Xcode.

CopilotForXCode — Instalando a extensão

Github: https://github.com/intitni/CopilotForXcode

Podemos fazer o download do instalador ou instalar usando o Homebrew.

brew install --cask copilot-for-xcode
Extensão para Xcode, não oficial para GitHub Copilot

Pré-requisitos:

  • Você vai precisar do Node JS v16+
  • Opcionalmente, configure o caminho para o Node. O valor padrão é apenas node, o Copilot for Xcode tentará localizar o Node automaticamente em seu lugar padrão (/usr/local/bin). Se o seu Node estiver instalado em outro lugar, você pode executar which nodeno terminal para obter o caminho.

Ativar a extensão

Habilite a extensão: Em System Settings, navegue atéPrivacy & Securitye vá paraExtensions. Clique Xcode Source Editore marque Copilot.

Se você estiver usando o macOS Monterey, entre no menu System Settings -> Extensions.

Entrar no GitHub Copilot

  1. No aplicativo do Copilot for Xcode, clique em GitHub Copilot para inserir as configurações da sua conta do GitHub Copilot.
  2. Clique em login e você será direcionado para um site de verificação fornecido pelo GitHub, um código de usuário será colado em sua área de transferência.
  3. Após fazer login, volte ao aplicativo e clique em confirmar login, para finalizar.

Para mais informações, você pode consultar a página da extensão no GitHub, é bem explicativo.

Primeiras impressões

Essa extensão ajuda bastante, o fato de não precisar ficar alternando entre IDE`s é bom. Agiliza o dia-a-dia. Porém, o Copilot For Xcode tem algumas limitações, essas que são bem explicadas na página da extensão:

  • As sugestões são mais lentas que no VSCode.
  • Algumas vezes as sugestões falham e/ou não entendem o que você está fazendo.
  • Dependendo, algumas vezes ele pode deixar o Xcode um pouco lento.

Bom, tirando isso a extensão tem se mostrado de grande ajuda. Com mais tempo de testes, quero mensurar quais foram os principais ganhos em desempenho usando o Copilot. Vou trazer tudo em uma segunda parte.

Vale ressaltar que a extensão está com constantes atualizações, dependendo de quando você estiver lendo este artigo, alguns dos principais problemas já tenha sido sanados. (Ou quem sabe, já tenha uma integração oficial do Xcode com o Copilot).

Abaixo temos alguns exemplos de uso da extensão no Xcode. O primeiro exemplo, ao começar um comentário, o Copilot me sugere um MARK.

Copilot sugerindo um MARK

Neste segundo exemplo, temos, após meu comentário ScrollView, ele sugerindo uma declaração básica de um scrollView

Copilot sugerindo a declaração de uma scroll view

Em resumo, as sugestões são mostradas em um widget flutuante e muito intuitivo. Você pode escolher ser mostrada em um comentário também, porém essa opção, segundo a documentação da extensão, logo será removida.

Nesse primeiro momento a minha intenção era conseguir usar o Copilot para o desenvolvimento iOS. Feito isso, agora é medir a ferramenta com um uso mais constante e mensurar as vantagens.

Considerações finais

Quero aproveitar para deixar algumas práticas recomendadas para o uso do GitHub Copilot:

  1. Comece pequeno: quando se trata do GitHub Copilot, menos é mais. Comece com trechos de código pequenos e simples e trabalhe até os mais complexos. Seu código agradecerá por isso.
  2. Revise antes de usar: antes de usar qualquer pedaço de código gerado em seu código, certifique-se de revisá-los primeiro. Verifique se eles são relevantes e precisos. Isso vai lhe poupar muitas dores de cabeça no futuro.
  3. Confie em seus instintos: Sim, o GitHub Copilot é uma ferramenta super útil, mas não se esqueça de confiar em seu próprio conhecimento e experiência ao tomar decisões de codificação. É a melhor maneira de garantir que seu código seja excelente.
  4. Mantenha-se organizado: sabemos que o GitHub Copilot pode gerar trechos de código na velocidade da luz, mas não deixe que isso o tente a escrever códigos confusos e desorganizados. Mantenha as coisas limpas e fáceis de seguir.
  5. Continue treinando: quanto mais você usa o GitHub Copilot, melhor ele consegue prever o que você precisa. Portanto, continue usando e treinando com seu código. Antes que você perceba, será como ter um parceiro de codificação que sabe exatamente do que você precisa.

Bom, é isso por enquanto. Em breve trarei mais do meu uso com o GitHub Copilot.

Links

CopilotForXcode: https://github.com/intitni/CopilotForXcode

SourceKit-LSP: https://github.com/apple/sourcekit-lsp

GitHub Copilot: https://github.com/features/copilot

--

--