Back-End

11 ago, 2016

Plugin IntelliJ para Perl – domine o seu código

Publicidade

Desenvolver e navegar em uma grande base de código podem se revelar um grande desafio. Uma ferramenta comum quando enfrentamos uma grande base de código é o Ambiente de Desenvolvimento Integrado (IDE). Infelizmente, a principal linguagem de programação na Booking.com, Perl, tem suporte limitado para IDE. Esta é a história do esforço conjunto com a comunidade open source para atender a essa necessidade de suporte para IDE para a linguagem de programação Perl.

A busca

No passado, eu trabalhei em grandes projetos em um ambiente baseado em Java e aprendi a importância e o valor de uma boa IDE para apoio em tarefas diárias, enquanto ela ajuda a navegar no seu caminho através das linhas intermináveis de código em seus projetos. Quando eu comecei a trabalhar na Booking.com (aproximadamente 2 anos atrás), eu era novo em Perl e comecei a procurar uma IDE para Perl.

Comecei com IDEs orientadas à Perl e mudei para plugins em Eclipse e IntelliJ, mas essas tentativas não deram em nada.

A maioria das soluções só fornecia realce de sintaxe, enquanto outras sugeriam um autocompletar básico, baseado em texto ou token. Nenhum deles forneceu plena integração em que a IDE compreendesse as relações entre as variáveis, sub-rotinas, e os seus argumentos e pacotes. Eu também queria suporte para padrões como herança.

Por um tempo, eu recorri ao Sublime Text, mas mesmo o Sublime Text era somente um editor de texto melhorado em vez de uma IDE completa.

im-1

Procurar um pacote é tranquilo com o recurso ‘Navigate to Class’

Território fértil para inovação

Felizmente, na Booking.com temos hackathons (que duram vários dias). Eles nos permitem experimentar ideias e projetos. Eles permitem explorar várias iniciativas que podem incluir a adição de novas ferramentas para tornar o fluxo de trabalho mais eficaz, novos sistemas ou enfrentar qualquer uma das questões para as quais você normalmente não tem tempo no seu trabalho diário. Aproveitei a oportunidade para começar a trabalhar em um plugin adequado para nos fornecer uma IDE completa para Perl.

im-2

Com referência: você pode clicar no pacote e abrir o arquivo do mesmo ou clicar em uma chamada de sub-rotina e ir para a sua declaração

Começando do zero

Enquanto eu encontrei algumas discussões sobre os desafios da análise do perl ou expressá-las com BNF (uma técnica de notação frequentemente usada para descrever sintaxe para linguagens de programação), eu sabia que, com desenvoltura suficiente, a maioria dos casos de uso pode ser coberta com expressões regulares.

Já que eu estava familiarizado com as capacidades do IntelliJ e seu fluxo de trabalho de desenvolvimento de plugin, eu decidi desenvolver um plugin que irá integrar o suporte de linguagens personalizadas, que compensará o suporte limitado que oferece ao Perl.

Um dos desafios ao analisar uma linguagem (especialmente uma dinâmica como Perl) é que isso requer uma grande quantidade de iterações. Cada vez que você adiciona uma coisa, ela quebra duas outras coisas. No entanto, após vários hackathons e trabalho contínuo no plugin em casa, eu consegui cobrir a maioria dos casos de uso.

Eu também acrescentei muitos recursos importantes, como:

  • Autocompletar orientado a objetos para pacotes (incluindo sub-rotinas herdadas de pacotes pais)
  • Ir para a implementação de um pacote clicando em um ícone na sua linha
  • Procurar por nome de pacote
  • Realce de sintaxe
  • Criação de projeto/módulo Perl e seleção de SDK
  • Suporte para executar arquivos .pl
  • Autocompletar de sub-rotinas com argumentos

im-3

Escalares, sub-rotinas (e seus argumentos), pacotes e pacotes de herança – todos agora têm autocompletar com o plugin IntelliJ para Perl

Primeiras impressões

Mostrei o plugin na empresa, e vários desenvolvedores começaram a usá-lo e a contribuir com o projeto. Isso levou a um substancial aumento da velocidade de desenvolvimento do plugin, o que permitiu a adição de mais funcionalidades ao projeto.

Com o passar do tempo, comecei a perceber que sem uma BNF completa haveria sempre algumas funcionalidades no IntelliJ que o plugin nunca poderia suportar (criação de referências entre os vários componentes da linguagem, verificações de erro de sintaxe etc.).

Eu também sabia que, quanto mais esse projeto crescesse, seria necessário mais tempo e trabalho do que uma única pessoa poderia fornecer. Sabendo que a Booking.com incentiva os funcionários a compartilharem e contribuírem com a comunidade de código aberto, eu enviei o projeto para o GitHub e comecei a navegar nos fóruns de plugin IntelliJ.

im-4

Consultas Mysql autocompletam bases de dados, tabelas e colunas

Trabalhando com a comunidade open source

Pouco depois de lançar o plugin, fui contatado por Alexandr Evstigneev, um desenvolvedor talentoso da comunidade open source que já tinha criado um plugin similar.

Já que o Alexandr conseguiu expressar quase toda a linguagem Perl em BNF no seu plugin e o plugin da Booking.com já continha muitos recursos, sabíamos que poderíamos nos beneficiar da fusão de nossos projetos. Eu também vi isso como uma grande oportunidade de retribuir à comunidade open source, e começamos a migrar o nosso código para o repositório dele, recurso por recurso.

Depois de alguns meses de integração, juntamente com mais pessoas da comunidade open source contribuindo, conseguimos que o IntelliJ funcionasse como uma IDE Perl completa, que compreende Perl como linguagem. Referencing, Find by Usage, Going to subroutine declaration, Database Integration e auto-completar, Package Hierarchy – isso (e mais) são parte do suporte que esse plugin oferece a partir do IntelliJ.

Enquanto Alexandr continuou trabalhando pesado na estrutura BNF e acrescentando recursos com outros colaboradores que aderiram ao projeto no GitHub, apresentei o plugin em um meetup do grupo AmsterdamX.pm Perl Mongers para desenvolvedores Perl da língua inglesa que estão em Amsterdã e na Holanda. A apresentação gerou um grande retorno e entusiasmo, o que nos motivou a continuar o nosso trabalho com o plugin. Você pode instalar o plugin diretamente através do menu de plugin do IntelliJ (procure por Perl5 Support).

im-5O projeto do plugin no GitHub

Conclusão

Hoje, o projeto pertence à comunidade e é mantido por Alexandr, o principal colaborador. O trabalho nesse projeto durante os nossos hackathons com a comunidade open source tem sido proveitoso e benéfico tanto para nós na Booking.com quanto para a comunidade como um todo.

Olhando para o futuro, existem ainda mais recursos a serem adicionados, como suporte para Mason, permitindo a depuração no cliente e servidor. Então, se você estiver interessado no plugin, você é bem-vindo para se juntar ao esforço de desenvolvimento no GitHub!

***

Eli Abramovitch faz parte do time de colunistas internacionais do iMasters. O artigo foi publicado originalmente em Booking.com. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://blog.booking.com/perl-intellij-plugin.html. Se tiver alguma pergunta, entre em contato pelo Twitter (@planetbooking).