Executando verificação de segurança...
4

[DICA] Como integrar o Jest ao neovim (sem plugins) 🃏🃏🃏

Introdução

Quem já é usuário antigo do tabnews talvez já tenha visto alguma de meus vários posts sobre neovim . Uma das coisas que eu mais costo nele é sua altíssima capacidade de personalização, através de lua ou vimscript. Com isso, você não precisa necessariamente de um plugin para fazer algo. Você pode escrever uma pequena função para automatizar uma tarefa rotineira do seu dia.

Como criar uma integração com o Jest

Nesse dica, vou mostrar o passo a passo com a linguagem lua, mas você pode adaptar para vimscritpt seguindo a mesma ideia.

-- Terminal --------------------------------------
vim.api.nvim_set_keymap('t', '<C-h>', '<C-\\><C-n><C-w>h', { noremap = true, silent = true })
vim.api.nvim_set_keymap('t', '<C-n>', '<C-\\><C-n>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>j', ':lua nxJest()<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>jw', ':lua nxJestWatch()<CR>', { noremap = true, silent = true })

function _G.nxJest()
  local command = 'edit term://npm test'
  vim.cmd(command)
end

function _G.nxJestWatch()
  local command = 'vsplit term://npm test --watch'
  vim.cmd(command)
end

vim.cmd('autocmd TermOpen * setlocal nonumber norelativenumber') -- Disable numbers on terminal buffer

neovim

Explicação

Para fazer essa integração eu criei alguns remaps que chamam uma função usa a api nativa do vim para abrir um buffer de terminal e executar o comando npm test. Quando o terminal for aberto, você pode usar a ou i para entrar no modo de inserção e usar coisas como Ctrl + c.

Remaps

  • Leader + j: Abre o Jest em um buffer de terminal cobrindo toda a área de edição
  • Leader + j + w: Abre um painel lateral com um buffer de terminal e roda o Jest no modo watch
  • Ctrl + h: Sai do modo de inserção do painel lateral e volta ao painel à esquerda
  • Ctrl + n: Sai do modo de inserção no terminal

Expandindo as possibilidades

O mais legal da liberdade que o neovim traz é que eu fui capaz de fazer em poucas linhas uma integração com o Nx, framework de monorepo TypeScript usado na empresa em que trabalho. com a linguagem lua, eu fui capaz de pegar o caminho do arquivo aberto e através dele rodar os testes relacionados usando a sintaxe do nx. Ou seja, você pode usar a ideia dentro das suas necessidades. É possível usar isso para qualquer outra linguagem, pois isso é feito apenas usando as funções nativas do neovim para abrir seu terminal integrado. Eu apenas escrevi algumas automações para acelerar meu trabalho.


function _G.nxJest()
  local filepath = vim.fn.expand('%')
  local api = string.gsub(string.gsub(filepath, '/home/nathan/Trabalho/Workspace/apps/api/', ''), '/.*', '')

  local command = 'edit term://nx test api-' .. api .. ' --all'
  local teste = string.gsub(filepath, '/home/nathan/Trabalho/Workspace/app', '')
  vim.cmd(command)
end

function _G.nxJestWatch()
  local filepath = vim.fn.expand('%')
  local api = string.gsub(string.gsub(filepath, '/home/nathan/Trabalho/Workspace/incentive.me/apps/api/', ''), '/.*', '')

  local command = 'vsplit term://nx test api-' .. api .. ' --all --watch'
  vim.cmd(command)
end

Espero que tenha gostado! 😄