Configurando o Emacs para desenvolvimento em Swift

Renato CruzRenato Cruz
4 min read

O GNU Emacs é um editor de texto altamente personalizável, que teve origem como um pacote de macros para o editor TECO da Digital Equipment Corporation.

Vários editores semelhantes ao Emacs e derivados surgiram ao longo dos anos, mas este guia foca no GNU Emacs.

Este guia mostra como configurar uma nova instalação do Emacs para desenvolvimento com a linguagem de programação Swift.

Este guia assume que você já instalou a linguagem de programação Swift.

Instalando o Emacs

macOS

O site Emacs for Mac OS X fornece binários universais em uma imagem de disco padrão do macOS.

Basta baixar o arquivo, abri-la e arrastar o aplicativo para a pasta Aplicativos.

Microsoft Windows

MSYS2

pacman -S mingw-w64-x86_64-emacs

Instalador

O instalador do GNU Emacs para Windows pode ser baixados através do link:

Debian (Ubuntu)

sudo apt install \
emacs

Se estiver usando um sistema sem interface gráfica (GUI), como servidores ou contêineres, use:

sudo apt install \
emacs-nox

RedHat (RHEL, CentOS, Fedora)

sudo dnf install \
emacs

Em versões antigas, pode ser necessário usar yum em vez de dnf.


Configurando o Emacs

Usuários antigos do Emacs podem lembrar de instalar pacotes Lisp manualmente.

Hoje em dia, o melhor é usar um gerenciador de pacotes.

Vamos configurar o MELPA, um repositório popular de pacotes para Emacs.

Abra o Emacs, pressione C-x C-f, digite ~/.emacs e pressione Enter. Adicione o seguinte conteúdo:

;;; Adiciona o MELPA como fonte de pacotes
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

Agora, vamos instalar o use-package, que simplifica a instalação e organização dos pacotes:

;;; Inicializa o `use-package`
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(eval-when-compile
  (require 'use-package))

Em seguida, adicionamos uma função para localizar o sourcekit-lsp:

;;; Localiza o sourcekit-lsp
(defun find-sourcekit-lsp ()
  (or (executable-find "sourcekit-lsp")
      (and (eq system-type 'darwin)
           (string-trim (shell-command-to-string "xcrun -f sourcekit-lsp")))
      "/usr/local/swift/usr/bin/sourcekit-lsp"))

Agora, instale os pacotes necessários para desenvolvimento com Swift:

;;; Pacotes úteis para desenvolvimento em Swift

;; Suporte a arquivos .editorconfig
(use-package editorconfig
    :ensure t
    :config (editorconfig-mode +1))

;; Suporte à edição de código Swift
(use-package swift-mode
    :ensure t
    :mode "\\.swift\\'"
    :interpreter "swift")

;; Delimitadores coloridos (parênteses, colchetes, etc.)
(use-package rainbow-delimiters
    :ensure t
    :hook ((prog-mode . rainbow-delimiters-mode)))

;; Autocompletar com company-mode
(use-package company
    :ensure t
    :config
    (global-company-mode +1))

;; Integração com Swift LSP
(use-package lsp-mode
    :ensure t
    :commands lsp
    :hook ((swift-mode . lsp)))

;; Interface para lsp-mode
(use-package lsp-ui
    :ensure t)

;; Suporte ao sourcekit-lsp
(use-package lsp-sourcekit
    :ensure t
    :after lsp-mode
    :custom
    (lsp-sourcekit-executable (find-sourcekit-lsp) "Find sourcekit-lsp"))

Adicionalmente, instale alguns pacotes para melhorar a aparência:

;; Powerline
(use-package powerline
  :ensure t
  :config
  (powerline-default-theme))

;; Spaceline
(use-package spaceline
  :ensure t
  :after powerline
  :config
  (spaceline-emacs-theme))

Caso queira desabilite a tela inicial e a barra de ferramentas:

;;; Desativa a tela de início
(setq inhibit-startup-screen t)

;;; Desativa a barra de ferramentas
(tool-bar-mode -1)

Salve seu arquivo .emacs com C-x C-s e reinicie o Emacs.


Conclusão

Configuramos o Emacs para editar código Swift, com realce de sintaxe, integração com o SourceKit-LSP, suporte a boas práticas modernas como .editorconfig, e uma interface moderna com Powerline e Spaceline.


Arquivo .emacs completo

;;; Adiciona o MELPA como fonte de pacotes
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

;;; Inicializa o `use-package`
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(eval-when-compile
  (require 'use-package))

;;; Localiza o sourcekit-lsp
(defun find-sourcekit-lsp ()
  (or (executable-find "sourcekit-lsp")
      (and (eq system-type 'darwin)
           (string-trim (shell-command-to-string "xcrun -f sourcekit-lsp")))
      "/usr/local/swift/usr/bin/sourcekit-lsp"))

;;; Pacotes úteis para desenvolvimento em Swift

(use-package editorconfig
    :ensure t
    :config (editorconfig-mode +1))

(use-package swift-mode
    :ensure t
    :mode "\\.swift\\'"
    :interpreter "swift")

(use-package rainbow-delimiters
    :ensure t
    :hook ((prog-mode . rainbow-delimiters-mode)))

(use-package company
    :ensure t
    :config
    (global-company-mode +1))

(use-package lsp-mode
    :ensure t
    :commands lsp
    :hook ((swift-mode . lsp)))

(use-package lsp-ui
    :ensure t)

(use-package lsp-sourcekit
    :ensure t
    :after lsp-mode
    :custom
    (lsp-sourcekit-executable (find-sourcekit-lsp) "Find sourcekit-lsp"))

(use-package powerline
  :ensure t
  :config
  (powerline-default-theme))

(use-package spaceline
  :ensure t
  :after powerline
  :config
  (spaceline-emacs-theme))

(setq inhibit-startup-screen t)
(tool-bar-mode -1)
0
Subscribe to my newsletter

Read articles from Renato Cruz directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Renato Cruz
Renato Cruz