diff --git a/pkgs/applications/editors/neovim/tests/default.nix b/pkgs/applications/editors/neovim/tests/default.nix index 20045b23a10a..de18a630cca4 100644 --- a/pkgs/applications/editors/neovim/tests/default.nix +++ b/pkgs/applications/editors/neovim/tests/default.nix @@ -9,6 +9,7 @@ */ { vimUtils, + neovimUtils, writeText, neovim, vimPlugins, @@ -491,4 +492,70 @@ pkgs.lib.recurseIntoAttrs rec { ''; passthru.requiredLuaModules = [ luassert ]; }; + + nvim_require_check_neovim_plugin = + let + luaPkg = neovim-unwrapped.lua.pkgs.buildLuarocksPackage { + pname = "neovim-require-check-fails"; + version = "0.0.1-1"; + src = runCommandLocal "neovim-require-check-fails-src" { } '' + mkdir -p "$out" + cat > "$out/neovim-require-check-fails-0.0.1-1.rockspec" <<'EOF' + package = "neovim-require-check-fails" + version = "0.0.1-1" + source = { + url = "." + } + build = { + type = "none" + } + EOF + ''; + }; + in + testers.testBuildFailure ( + neovimUtils.buildNeovimPlugin { + luaAttr = luaPkg; + doCheck = true; + postInstall = '' + mkdir -p "$out/lua" + cat > "$out/lua/require_check_fails.lua" <<'EOF' + error("neovimRequireCheckHook required installed module") + EOF + ''; + } + ); + + nvim_require_check_ignores_test_modules = vimUtils.buildVimPlugin { + pname = "neovim-require-check-ignores-test-modules"; + version = "0"; + src = runCommandLocal "neovim-require-check-ignores-test-modules-src" { } '' + mkdir -p \ + "$out/lua/require-check-ignores"/{debug,script,scripts,test,tests,spec,_meta} \ + "$out/lua/require-check-ignores" + cat > "$out/lua/require-check-ignores/init.lua" <<'EOF' + return {} + EOF + for dir in debug script scripts test tests spec _meta; do + cat > "$out/lua/require-check-ignores/$dir/failing.lua" < "$out/lua/require-check-ignores/failing_meta.lua" <<'EOF' + error("excluded _meta module was required") + EOF + cat > "$out/lua/require-check-ignores/failing_spec.lua" <<'EOF' + error("excluded _spec module was required") + EOF + cat > "$out/lua/require-check-ignores/failing.spec.lua" <<'EOF' + error("excluded .spec module was required") + EOF + cat > "$out/lua/require-check-ignores/failing.test.lua" <<'EOF' + error("excluded .test module was required") + EOF + cat > "$out/lua/require-check-ignores/meta.lua" <<'EOF' + error("excluded meta module was required") + EOF + ''; + }; } diff --git a/pkgs/applications/editors/vim/plugins/hooks/neovim-require-check-hook.sh b/pkgs/applications/editors/vim/plugins/hooks/neovim-require-check-hook.sh index 60e6d6758198..5a309207cc53 100644 --- a/pkgs/applications/editors/vim/plugins/hooks/neovim-require-check-hook.sh +++ b/pkgs/applications/editors/vim/plugins/hooks/neovim-require-check-hook.sh @@ -4,17 +4,27 @@ echo "Sourcing neovim-require-check-hook.sh" # Discover modules automatically if nvimRequireCheck is not set discover_modules() { - echo "Running module discovery in source directory..." + echo "Running module discovery in output directory..." # Create unique lists so we can organize later modules=() while IFS= read -r lua_file; do - # Ignore certain infra directories - if [[ "$lua_file" =~ (^|/)(debug|script|scripts|test|tests|spec)(/|$) || "$lua_file" =~ .*\meta.lua ]]; then - continue + # Ignore infrastructure directories and non-runtime module files + case "/$lua_file/" in + */debug/* | */script/* | */scripts/* | */test/* | */tests/* | */spec/* | */_meta/*) + continue + ;; + esac + + case "${lua_file##*/}" in + *meta.lua | *_spec.lua | *.spec.lua | *.test.lua) + continue + ;; + esac + # Ignore optional telescope and lualine modules - elif [[ "$lua_file" =~ ^lua/telescope/_extensions/(.+)\.lua || "$lua_file" =~ ^lua/lualine/(.+)\.lua ]]; then + if [[ "$lua_file" =~ ^lua/telescope/_extensions/(.+)\.lua || "$lua_file" =~ ^lua/lualine/(.+)\.lua ]]; then continue # Grab main module names elif [[ "$lua_file" =~ ^lua/([^/]+)/init.lua$ ]]; then @@ -30,7 +40,7 @@ discover_modules() { echo "$lua_file" modules+=("${BASH_REMATCH[1]}") fi - done < <(find "$src" -name '*.lua' | xargs -n 1 realpath --relative-to="$src") + done < <(find "$out" -name '*.lua' -exec realpath --relative-to="$out" {} +) nvimRequireCheck=("${modules[@]}") echo "Discovered modules: ${nvimRequireCheck[*]}"