From 1dd55d9d814df9ca0694af240085e98ebd841c09 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Wed, 3 Jun 2026 09:50:06 -0500 Subject: [PATCH] neovim-require-check-hook: ignore test and metadata modules Installed plugin outputs can include test or metadata Lua files next to runtime modules. Skip common directory and filename patterns during automatic discovery so require checks stay focused on importable runtime modules. Add regression coverage for ignored directories and test/meta module filenames. --- .../editors/neovim/tests/default.nix | 33 +++++++++++++++++++ .../hooks/neovim-require-check-hook.sh | 18 +++++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/editors/neovim/tests/default.nix b/pkgs/applications/editors/neovim/tests/default.nix index a7a31ea4e65e..de18a630cca4 100644 --- a/pkgs/applications/editors/neovim/tests/default.nix +++ b/pkgs/applications/editors/neovim/tests/default.nix @@ -525,4 +525,37 @@ pkgs.lib.recurseIntoAttrs rec { ''; } ); + + 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 bd3ea95e9470..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 @@ -10,11 +10,21 @@ discover_modules() { 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