about summary refs log tree commit diff
path: root/pkgs/applications/editors/neovim
diff options
context:
space:
mode:
authorGuillaume Girol <symphorien+git@xlumurb.eu>2022-08-24 12:00:00 +0000
committerMatthieu Coudron <teto@users.noreply.github.com>2022-08-26 21:17:31 +0200
commit38e16b192af13ff6cffc8a35a25f390f1e96b585 (patch)
tree6d97312db833656982aac238070e9f8f57c8e7f1 /pkgs/applications/editors/neovim
parentf98065ab50c6a89bd97949557f85a63e5d82804a (diff)
neovim: fix plugin loading order
fixes https://github.com/NixOS/nixpkgs/issues/188167
Diffstat (limited to 'pkgs/applications/editors/neovim')
-rw-r--r--pkgs/applications/editors/neovim/tests/default.nix29
-rw-r--r--pkgs/applications/editors/neovim/utils.nix1
2 files changed, 30 insertions, 0 deletions
diff --git a/pkgs/applications/editors/neovim/tests/default.nix b/pkgs/applications/editors/neovim/tests/default.nix
index 97c7a2505a5c0..14b6bdf2e375d 100644
--- a/pkgs/applications/editors/neovim/tests/default.nix
+++ b/pkgs/applications/editors/neovim/tests/default.nix
@@ -1,3 +1,4 @@
+# run tests by building `neovim.tests`
 { vimUtils, vim_configurable, writeText, neovim, vimPlugins
 , lib, fetchFromGitHub, neovimUtils, wrapNeovimUnstable
 , neovim-unwrapped
@@ -66,6 +67,15 @@ let
     sha256 = "1ykcvyx82nhdq167kbnpgwkgjib8ii7c92y3427v986n2s5lsskc";
   };
 
+  # this plugin checks that it's ftplugin/vim.tex is loaded before $VIMRUNTIME/ftplugin/vim.tex
+  # the answer is store in `plugin_was_loaded_too_late` in the cwd
+  texFtplugin = pkgs.runCommandLocal "tex-ftplugin" {} ''
+    mkdir -p $out/ftplugin
+    echo 'call system("echo ". exists("b:did_ftplugin") . " > plugin_was_loaded_too_late")' > $out/ftplugin/tex.vim
+    echo ':q!' >> $out/ftplugin/tex.vim
+    echo '\documentclass{article}' > $out/main.tex
+  '';
+
   # neovim-drv must be a wrapped neovim
   runTest = neovim-drv: buildCommand:
     runCommandLocal "test-${neovim-drv.name}" ({
@@ -128,6 +138,25 @@ rec {
     ${nvim_with_plug}/bin/nvim -i NONE -c 'color base16-tomorrow-night'  +quit! -e
   '';
 
+  nvim_with_ftplugin = neovim.override {
+    extraName = "-with-ftplugin";
+    configure.packages.plugins = with pkgs.vimPlugins; {
+      start = [
+        texFtplugin
+      ];
+    };
+  };
+
+  # regression test that ftplugin files from plugins are loaded before the ftplugin
+  # files from $VIMRUNTIME
+  run_nvim_with_ftplugin = runTest nvim_with_ftplugin ''
+    export HOME=$TMPDIR
+    ${nvim_with_ftplugin}/bin/nvim ${texFtplugin}/main.tex
+    result="$(cat plugin_was_loaded_too_late)"
+    echo $result
+    [ "$result" = 0 ]
+  '';
+
 
   # check that the vim-doc hook correctly generates the tag
   # we know for a fact packer has a doc folder
diff --git a/pkgs/applications/editors/neovim/utils.nix b/pkgs/applications/editors/neovim/utils.nix
index cb0c005759b80..2af7ffb43943d 100644
--- a/pkgs/applications/editors/neovim/utils.nix
+++ b/pkgs/applications/editors/neovim/utils.nix
@@ -106,6 +106,7 @@ let
           flags = [
             "--cmd" (lib.intersperse "|" hostProviderViml)
             "--cmd" "set packpath^=${vimUtils.packDir packDirArgs}"
+            "--cmd" "set rtp^=${vimUtils.packDir packDirArgs}"
             ];
         in
         [