Patrice Ferlet
Patrice Ferlet
Créateur de ce blog.
Publié le avr. 12, 2024 Temps de lecture: 3 min

Me suivre sur Mastodon

Mason, comment installer facilement des LSP, des linters, des formatteurs... sur NeoVim

thumbnail for this post

NeoVim, le Vim du futur, sait parfaitement gérer des LSP (Language Server Protocol), des linters, des formateurs, des snippets, etc. Avec CoC, on est à deux doigts d’avoir un VSCode en mode terminal. Mais installer un LSP (Language Server Protocol), demandait de faire deux ou trois choses manuellement pour chaque langage. C’était sans compter sur “Mason”.

Mason est un utilitaire simple et proprement pensé, avec un registre de langages bien fourni, qui permet d’installer facilement des LSP, des linters, des formateurs, des snippets, etc. pour NeoVim.

Je vous l’avoue, j’ai eu un peu de mal à comprendre comment on l’initialise, d’où ce billet. Mais dans les faits, c’est super simple.

Installation

Il faut installer le plugin dans NeoVim. Personnellement, j’utilise vim-plug. C’est simple et efficace, ça s’installe en deux temps trois mouvements. Et je n’ai qu’à ajouter une ligne dans mon fichier de configuration pour que le plugin soit pris en compte.

Plug 'williamboman/mason.nvim'

On doit alors taper :PlugInstall pour installer le plugin.

Ensuite, il faut initialiser Mason. Pour cela, il faut ajouter une ligne dans votre fichier de configuration, plus bas, en fin de configuration si vous le voulez.

lua require('mason').setup()

C’est cette ligne qui n’est pas dans la documentation (je suis étonné, et j’ai ouvert cette issue pour le signaler).

À partir de là, le chemin d’installation des LSP et autres outils est ~/.local/share/nvim/mason/bin/ au sein de NeoVim.

Ce qui a plusieurs avantages :

  • D’abord, cela ne va pas polluer votre “PATH” dans les terminaux. Par exemple quand je tape “helm” en ligne de commande, je ne veux pas voir helm_ls apparaître dans la completion
  • D’autre part, cela ne pollue pas le système. Les LSP sont dans un répertoire personnel, facile à dégager, géré par Mason et c’est tout.
  • Et le fait que le PATH soit “local à neovim” fait que vous n’avez pas à spécifier le chemin complet des exécutables dans vos configurations.

En bref, c’est déjà bien pensé.

Installer un LSP

Reste à installer un LSP. Prenons par exemple un LSP pour helm.

Ouvrez NeoVim et tapez :MasonInstall helm-ls

Va alors s’ouvrir cette fenêtre (fermez en pressant la touche “Echap”) :

Installation d’un LSP avec Mason

Et voilà, c’est tout. Mason va télécharger le LSP, l’installer dans le répertoire ~/.local/share/nvim/mason/bin/.

Pour que NeoVim sache ce qu’est un fichier helm (on parle du “type de fichier”, parce que c’est un fichier YAML mais avec des balises de template, et que NeoVim ne peut pas le comprendre tout seul), il faut ajouter un plugin (et on n’oublie pas de taper :PlugInstall pour l’installer) :

Plug 'towolf/vim-helm'

Vous pouvez ensuite définir comment l’utiliser. Moi, j’utilise le plugin “Coc” pour des milliers de raisons. Et une des raisons est que je peux utiliser des LSP sans me prendre la tête. Il suffit de taper :CocConfig et d’ajouter une ligne dans le fichier de configuration de CoC.

{
  "languageserver": {
    "helm": {
      "command": "helm_ls",
      "args": ["serve"],
      "filetypes": ["helm"],
      "rootPatterns": ["Chart.yaml"],
    }
  }
}

Et voilà, vous avez un LSP pour helm. Il va vous engueuler quand vous faites des erreurs, vous donner des suggestions, autocompléter les valeurs en prenant en compte le fichier de “Values”, etc.

Conclusion

De mon point de vue, NeoVim est quasi parfait avec une configuration simple :

J’ai quelques autres plugins, pour la correction grammaticale (ce qui ne m’empêche pas d’en laisser passer, je suis vraiment pas rigoureux sur ce point), pour les snippets, j’ai aussi Copilot (parce que bon sang, c’est pratique), etc. Vraiment, NeoVim permet d’avoir un IDE complet.

Avec quelques astuces voilà à quoi ressemble mon NeoVim, dans mon terminal :

Mon NeoVim

Je pense qu’un jour, je ferai un billet sur ma configuration NeoVim, voir une vidéo…

comments powered by Disqus