Présentation

Le plugin AssemblyForNeovim, publié sous le nom 0xdeadf1sh/AssemblyForNeovim, ajoute à Neovim la capacité d’afficher le code assembleur généré pour du C, du C++ ou du Rust dans une fenêtre flottante. L’outil s’appuie sur les compilateurs natifs (cc/c++ ou rustc/cargo) présents dans le PATH et exploite le fichier compile_commands.json lorsqu’il est disponible, ce qui permet de récupérer les options de compilation exactes du projet.

Fonctionnement

Le déclenchement se fait via la combinaison <leader>a. En mode normal, la commande cible la fonction sous le curseur ; en mode visuel ou via :'<,'>Asm, elle compile les lignes sélectionnées. Une fois la compilation terminée, le plugin ouvre une fenêtre flottante contenant le listing assembleur. Des raccourcis internes (+/-) modifient le niveau d’optimisation -O, R relance la compilation, et q ferme la fenêtre, offrant un cycle d’itération rapide.

lazy.nvim: {
    "0xdeadf1sh/AssemblyForNeovim",
    config = function()
        require("asm").setup()
    end,
}

Analyse des performances et limites

Le recours à la compilation à la volée implique un coût d’exécution proportionnel à la taille du fichier et au niveau d’optimisation choisi. L’utilisation de -O0 génère un assembleur très verbeux, tandis que -O3 réduit la taille du listing mais augmente le temps de compilation. L’obligation d’avoir les compilateurs dans le PATH exclut les environnements où les toolchains sont gérées via des conteneurs ou des environnements virtuels non exposés. De plus, l’absence de compile_commands.json force le plugin à recourir à des options par défaut, ce qui peut produire un assembleur différent de celui utilisé par le système de build réel.

Perspectives d’utilisation

Pour les développeurs qui souhaitent inspecter rapidement le code machine sans quitter Neovim, le plugin offre une alternative légère à des services en ligne comme Godbolt. Son intégration native minimise les allers-retours entre l’IDE et le navigateur, ce qui améliore la productivité lors du débogage d’optimisations ou de la compréhension de comportements spécifiques du compilateur. Toutefois, les équipes qui utilisent des pipelines de compilation complexes (CMake, Bazel, Cargo workspaces) devront veiller à ce que le fichier compile_commands.json reflète fidèlement la configuration du projet, faute de quoi les résultats affichés pourraient être trompeurs.