Accéder à la documentation Mozilla Developer (MDN) depuis Neovim

Aujourd'hui, je me suis dit que j'en avais marre d'ouvrir un navigateur, faire une recherche pour trouver la documentation sur un élément ou un attribut HTML. C'est long, ça oblige à quitter son terminal, faire une recherche, cliquer sur le bon lien pour enfin commencer à lire puis revenir sur son code. Ça serait bien plus pratique de pouvoir accéder à la documentation sans quitter son terminal et si possible en utilisant peu le clavier (avoir un raccourci). J'ai donc créé des raccourcis Neovim (avec espoir de finir par n'en avoir qu'un) et je vous partage ma configuration.

Pré-requis

Le script

À mettre dans votre configuration Neovim :

local function mdn_lookup(kind)
local word = vim.fn.expand("<cword>")

local path = ""
if kind == "el" then
  path = "Elements"
elseif kind == "attr" then
  path = "Attributes"
elseif kind == "global" then
  path = "Global_attributes"
end

local url = "https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/" .. path .. "/" .. word

vim.cmd("botright split")
vim.cmd("resize 20")
vim.cmd("terminal readable " .. url .. " 2>/dev/null | w3m -T text/html -dump | bat -ppl md")
end

vim.keymap.set("n", "<leader>me", function() mdn_lookup("el") end)
vim.keymap.set("n", "<leader>ma", function() mdn_lookup("attr") end)
vim.keymap.set("n", "<leader>mg", function() mdn_lookup("global") end)

Pour l'utiliser, si je suis sur un mot dans mon code, j'utilise la combinaison appropriée. Par exemple, si mon curseur est positionné sur input, c'est un élément, donc j'utilise <leader>me. Autre exemple, si mon curseur est positionné sur class, c'est un attribut global, donc j'utilise <leader>mg.

Amélioration possible

En utilisant l'API de Mozilla, il serait possible de détecter automatiquement l'attribut, voire d'avoir un mode de recherche interactif. L'URL est de la forme https://developer.mozilla.org/api/v1/search?q=search_terms&page=1&locale=en-US et elle renvoie un JSON des documentations correspondantes, triées par score, incluant le chemin de la documentation liée.