Transformando Emacs em um IDE Python - Parte 1

O GNU Emacs é um editor de texto robusto, customizável e extensível para uso. É um dos projetos open-sources mais antigos que existe. Nessa série de artigos você aprenderá instalar e configurar esse editor como um ambiente de desenvolvimento integrado para Python.

Emacs configurado como um IDE Python

O Emacs teve sua origem em 1974 como uma melhoria para um editor existente, chamado TECO (Text Editor & COrrector). Depois, foi escrito totalmente como um editor à parte, em 1976, no MIT (Massachusetts Institute of Technology) — fruto de trabalho de Richard Stallman, caracterizado por ser extensível mesmo enquanto está em execução, cujo artifício deve-se a flexibilidade da linguagem de sua implementação: Lisp.

Primeiros Passos

Primeiramente é necessário ter o editor GNU Emacs instalado em seu computador. Ele está disponível nessa página do GNU Emacs mas pode ser instalado via linha comando em ambientes unix-like. Você pode pesquisar pelo nome do pacote e instalá-lo.

Esse é um resumo dos procedimentos que serão realizados:
  1. Instalação dos pacotes Python
  2. Instalação dos pacotes do Emacs
  3. Configuração básica de preferências
  4. Configuração básica de atalhos
  5. Teste das funcionalidades

Note que esse tutorial serve como base e você é livre para customizá-lo. Nessa parte 1 será abordada apenas a instalação dos pacotes.


Instalação dos Pacotes Python

Utilizando o gerenciador de pacotes Python, chamado pip, instale esses pacotes:
  • rope ou jedi (auto-completação, refatoração e introspecção)
  • flake8 (conjunto de ferramentas para checagem de código)
  • autopep8 (autoformatação de código usando PEP8)
  • yapf (formatação de código aprimorada)

Use o comando pip install <pacote> para instalá-los.

Instalação dos pacotes Python mencionados.

Você pode optar por jedi ou rope. Ambos oferecem suporte ao autocomplete e introspecção de código, recuperando informações de objetos — quando possível — e possibilitam ir a uma definição específica de um objeto. Rope tem o seu foco em refatoração de código.

O pacote flake8 é um conjunto de três ferramentas: PyFlakes, que checa erros em seus arquivos fontes; pycodestyle, que checa se seus fontes estão de acordo com a recomendação e guia de estilo PEP8; e Ned Batchelder’s McCabe script, que serve para cálculo de complexidade ciclomática.

O pacote autopep8 formata o seu código automaticamente de acordo com recomendação e guia de estilo PEP8. Então, como você deve imaginar, ele depende do pacote pycodestyle contido em flake8.

Por fim, o pacote yapf, que é bem interessante. Disponibilizado no Github em um repositório da Google, esse pacote serve para formatar códigos Python. O autopep8 faz isso de acordo com a PEP8, mas não é porque o código está de acordo com a PEP8 que ele está bem formatado e é nesse caso que esse pacote entra.

Instalação dos Pacotes Emacs

A configuração do Emacs fica em um arquivo chamado init.el, localizado geralmente em $HOME/.emacs.d/. Caso esse arquivo não exista, não há problemas. Apenas certifique-se da existência do diretório. Mas caso exista, crie um backup ou mova o arquivo para um outro local. Caso utilize outro formato de init file, não há problemas e pode ler mais a respeito aqui (recomendado) e apenas adapte o tutorial.

Agora é preciso instalar alguns pacotes do Emacs. Digite no terminal o seguinte comando:

emacs --no-init-file

Esse comando faz com que o Emacs seja carregado sem a configuração do arquivo init.el em sua $HOME. E então, assumindo que o diretório ~/.emacs.d/ existe, execute dentro do Emacs: C-x C-f ~/.emacs.d/init.el RET.

Observação: caso não esteja familiarizado com o Emacs, isso pode ser útil.
  • C: equivalente a tecla Ctrl
  • M: equivalente a tecla Alt ou Command (Mac)
  • RET: equivalente a tecla RETURN ou ENTER

Caso seja a primeira vez que esteja usando esse editor, pode clicar nesse link da Emacs Wiki, em português, para aprender os comandos básicos, se houver necessidade.

Emacs carregado sem o init file.

Em seguida, precisamos habilitar o acesso a uma grande fonte de pacotes chamada MELPA. Adicione o seguinte código em seu init.el:

(package-initialize)

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))

Feito isso, você pode recarregar o seu init.el sem sair do editor, apenas executando M-x load-file RET ~/.emacs.d/init.el RET.

Em seguida, ainda no Emacs, execute: M-x package-list-packages RET. Isso nos possibilitará navegar entre a lista de pacotes e instalar o que desejamos.

Carregamento da lista de pacotes Emacs.

A lista de pacotes será carregada logo após o carregamento dos pacotes GNU Elpa (Emacs Lisp Package Archive), por isso, talvez demore um pouco. Após isso, instale os seguintes pacotes:
  • Elpy (ambiente de desenvolvimento Python para Emacs)
  • Expand-region (ferramenta para seleção de trechos de código)
  • Yafolding  (permite ocultar/exibir blocos de código)
  • Yasnippet-classic-snippets (ferramenta para construção de trechos de código)
  • All-the-icons (opcional)
  • Doom-theme (opcional)
  • Neotree (opcional)

Elpy (Emacs Lisp Python Environment) é o principal pacote desse tutorial e faz uso das ferramentas Python supracitadas.

Expand-region é uma ótima ferramenta que auxilia na seleção de trechos do código. Com a demonstração de uso, na parte 3 do tutorial, a sua utilidade se tornará mais clara.

Yafolding pode ser útil na navegação de seu código. Ele possibilita que um bloco de código possa ser ocultado.

Yasnippet-classic-snippets facilita a construção de blocos de código, exigindo apenas que uma palavra-chave seja digitada.

Os pacotes adicionais, com exceção do último (neotree), são temáticos. O doom-theme permite deixar a aparência do editor igual a que é exibida no início do artigo. Os ícones all-the-icons complementam isso. O neotree, por sua vez, permite que uma janela de navegação — em forma de árvore — seja aberta no canto esquerdo da tela.

Emacs usando all-the-icons
(Foto: Divulgação / Dom Charlesworth)


Importante: caso opte por instalar o pacote all-the-icons, após a instalação e recarregamento do seu Emacs ou o init.el, execute o comando M-x all-the-icons-install-fonts RET. Após isso atualize o cache de fontes da sua distribuição. No terminal, execute: fc-cache -f -v como um usuário não root.


Feita a instalação de todas as ferramentas acima, o Emacs está pronto para ser configurado. Pois, apenas a instalação das ferramentas não é o suficiente para trabalho, por isso o arquivo init.el deve ser editado. Essa configuração será exibida na parte 2 do tutorial.

O que você aprendeu

  • Uma introdução sobre o Emacs.
  • O básico sobre o arquivo de configuração do Emacs.
  • A instalação de pacotes Emacs e Python para criar o IDE uma breve descrição sobre eles.

Continua em Transformando Emacs em um IDE Python - Parte 2.

Referências
EMACSWIKI: Novato no Emacs. Disponível em <https://www.emacswiki.org/emacs/NovatoNoEmacs>. Acesso em 15 jan. 2019.

GITHUB. All-the-icons. Disponível em <https://github.com/domtronn/all-the-icons.el>. Acesso em 15 jan. 2019.

GITHUB. Elpy. Disponível em <https://github.com/jorgenschaefer/elpy>. Acesso em 15 jan. 2019.

GITHUB. Emacs doom themes. Disponível em <https://github.com/hlissner/emacs-doom-themes>. Acesso em 15 jan. 2019.

GITHUB. Emacs jedi. Disponível em <https://github.com/tkf/emacs-jedi>. Acesso em 15 jan. 2019.

GITHUB. Emacs neotree. Disponível em <https://github.com/jaypei/emacs-neotree>. Acesso em 15 jan. 2019.

GITHUB. Expand region. Disponível em <https://github.com/magnars/expand-region.el>. Acesso em 15 jan. 2019.

GITHUB. Ropemacs. Disponível em <https://github.com/python-rope/ropemacs>. Acesso em 15 jan. 2019.

GITHUB. Yapf. Disponível em <https://github.com/google/yapf>. Acesso em 15 jan. 2019.
GNU. GNU Emacs. Disponível em <https://www.gnu.org/software/emacs/download.html>. Acesso em 15 jan. 2019.

GNU. EMACS: The Extensible, Customizable Display Editor. Disponível em <https://www.gnu.org/software/emacs/emacs-paper.html#SEC24>. Acesso em 15 jan. 2019.

GNU. My Lisp Experiences and the Development of GNU Emacs. Disponível em <https://www.gnu.org/gnu/rms-lisp.html>. Acesso em 15 jan. 2019.

PYPI. Autopep8. Disponível em <https://pypi.org/project/autopep8/>. Acesso em 15 jan. 2019.

PYPI. Flake8. Disponível em <https://pypi.org/project/flake8/>. Acesso em 15 jan. 2019.

PYPI. Mccabe. Disponível em <https://pypi.org/project/mccabe/>. Acesso em 15 jan. 2019.

PYPI. Pycodestyle. Disponível em <https://pypi.org/project/pycodestyle/>. Acesso em 15 jan. 2019.

PYPI. Pyflakes. Disponível em <https://pypi.org/project/pyflakes/>. Acesso em 15 jan. 2019.


Para citar esse artigo:

Comentários