Delphi + GitHub Copilot

Apresentação

Olá, leitores! Neste post, vamos demonstrar como utilizar o GitHub Copilot para nos auxiliar no desenvolvimento de aplicações Delphi. Esse recurso pode nos ajudar a aumentar significativamente nossa velocidade e produtividade no desenvolvimento. Vou mostrar como ele se saiu em um pequeno teste, no qual pedi sua ajuda para a emissão de uma NF-e.

Infelizmente, não é possível integrar o GitHub Copilot diretamente com o IDE do Delphi, pois ele não disponibiliza (pelo menos até a data da escrita deste artigo) nenhuma API para integrações. Portanto, para realizar nossos testes, teremos que usar a IDE do Delphi em conjunto com o VS Code (Visual Studio Code).

Plugin Code4D-Wizard

Utilizaremos o plugin Code4D-Wizard para integrar o Delphi com o VS Code. Este plugin nos permite abrir arquivos e units no VS Code diretamente a partir do IDE do Delphi. Para isso, vamos acessar o repositório: https://github.com/Code4Delphi/Code4D-Wizard

Devemos baixar o repositório, o que pode ser feito tanto clonando o repositório quanto baixando o arquivo ZIP. Em seguida, instalaremos o plugin na IDE do Delphi. Para isso, basta abrir o projeto e selecionar a opção “Install”:

Ativando o DelphiLSP (Delphi Alexandria ou superior) (opcional)

* Esse passo é opcional, pois não influencia no uso do GitHub Copilot.

DelphiLSP.exe é um servidor de linguagem Delphi que implementa o Language Server Protocol (LSP). Ele encapsula recursos de linguagem, como auto completar (code completion) e percepção de erros (error insight) . Ele é usado dentro do IDE, mas também pode ser usado com o Visual Studio Code ou outros editores que oferecem suporte ao protocolo LSP.

Ativar o DelphiLSP (documentação) para usar corretamente a extensão LSP no Visual Studio Code.

Instalando o Visual Studio Code

Caso ainda não possua, instale o VS Code a través do seguinte link: https://code.visualstudio.com/download

Extensões – instalação automática pelo Code4D-Wizard

A instalação das extensões DelphiLSP e GitHub Copilot no VS Code pode ser feita através da própria IDE do Delphi, utilizando as seguintes opções do menu:

Extensão DelphiLSP – instalação pelo VS Code

Inicie o VS Code e instale a extensão DelphiLSP a partir de seu maketplace:

Extensão GitHub Copilot – instalação pelo VS Code

Instale a extensão Github Copilot em seu VS Code

Se inscrevendo no GitHub Copilot

Inscreva-se para usar o GitHub Copilot. Para isso acesse o seu GitHub na opção “Your Copilot” no popup menu que se abre quando se clica em seu avatar no canto superior direito no. Os primeiros 30 dias são um teste gratuito, depois custa 10 dólares / mês, na minha opinião um valor super acessível.

Acessando o GitHub Copilot pelo seu VS Code

De volta ao Visual Studio Code, entre com o Copilot, a opção fica no canto inferior esquerdo:

Tudo pronto! Vamos testar?

Criei um projeto VCL vazio com o nome de “ACBrGithubCopilot”, e adicionei uma unit vazia com o nome “NFe.Emitir”:

Para que a unit selecionada no Delphi seja aberta no VS Code, existem duas opções: pelo botão adicionado à barra de ferramentas (toolbar) do Delphi:

Para habilitar ou desabilitar a toolbar, basta clicar com o botão direito do mouse na parte superior do IDE, e selecionar a opção da toolbar “C4D VS Code Integration”:

Também é possível acessar a opção pelo item de menu do Code4D-Wizard:

Com isso nossa unit será aberta no VS Code, e como é possível ver na imagem a seguir, a extensão GitHub Copilot adicionou uma aba Chat para que possamos interagir com a IA: 

A partir daí, comecei a interagir com a IA através da IDE do VS Code. Primeiramente, perguntei se poderíamos conversar em português:

Então, perguntei a ele: “Qual o jeito mais fácil de emitir uma NF-e com o Delphi?” Ele indicou usar o ACBr para a emissão de NF-e e mostrou um exemplo de código:

Como é possível ver na ilustração a seguir, a utilização do código sugerido é bem simples. Basta posicionar o cursor no lugar desejado e selecionar a opção “Insert at Cursor” ou Ctrl+Enter. Porém, como é possível observar, ao voltar para o Delphi e tentar compilar, notamos que o código contém erros:

Voltei ao VS Code e pedi para que ele melhora-se o código. E ele realmente fez isso:

Estava dando erro ao compilar e informava que o Enum “ipVista” não estava sendo encontrado. Perguntei isso a ele, e ele conseguiu resolver adicionando “pcnConversao” ao bloco “uses” da unit.

Após eu perguntar novamente, ele também foi capaz de substituir “dhEmi” por “dEmi” e “DhSaiEnt” por “hSaiEnt” de maneira correta.

Utilizei o recurso do Copilot na própria linha do erro, neste caso, a falta de uso para o Date e o Time, porém ele não conseguiu resolver. Em vez disso, adicionou tags XML usadas para a criação de um Help Insight.

Curiosamente, ao digitar a mesma pergunta na aba do chat, ele conseguiu resolver e sugerir a adição da uses SysUtils à Unit.

Por último, informei que os enums “idNacional” e “TeNormal” não haviam sido encontrados. Dessa vez, ele não conseguiu resolver e insistiu que esses enums deveriam existir na unit “pcnConversao”. Porém, a solução correta seria adicionar “pcnConversaoNFe” à lista “uses” da unit.

Como podemos notar, o uso do GitHub Copilot pode nos auxiliar bastante no aumento da produtividade e velocidade, tanto para criar novos recursos quanto para resolver problemas. Pretendo trazer novamente esse tema ao nosso blog, explorando novas formas de utilizar a IA em conjunto com o Delphi. Por enquanto, é isso! Até a próxima!