neovim-require-check-hook: discover modules from output (#527642)

This commit is contained in:
Austin Horstman
2026-06-03 19:46:45 +00:00
committed by GitHub
2 changed files with 83 additions and 6 deletions
@@ -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" <<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
'';
};
}
@@ -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[*]}"