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.
This commit is contained in:
Austin Horstman
2026-06-03 10:47:20 -05:00
parent 182051dd87
commit 1dd55d9d81
2 changed files with 47 additions and 4 deletions
@@ -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" <<EOF
error("excluded $dir directory was required")
EOF
done
cat > "$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
'';
};
}
@@ -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