It is best effort since this was not part of a release yet. I tried to do display the warning at eval time but it ended up being harder than expected. I tried to rewrite buildVimPlugin with lib.extendMkDerivation to access the fixed point to no avail. I think it is something worth doing but in a separate PR. Here is a quickfix to avoid it ending up in release.
146 lines
4.9 KiB
Bash
146 lines
4.9 KiB
Bash
#shellcheck shell=bash
|
|
# Setup hook for checking whether Lua imports succeed
|
|
echo "Sourcing neovim-require-check-hook.sh"
|
|
|
|
# Discover modules automatically if nvimRequireCheck is not set
|
|
discover_modules() {
|
|
echo "Running module discovery in source 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 optional telescope and lualine modules
|
|
elif [[ "$lua_file" =~ ^lua/telescope/_extensions/(.+)\.lua || "$lua_file" =~ ^lua/lualine/(.+)\.lua ]]; then
|
|
continue
|
|
# Grab main module names
|
|
elif [[ "$lua_file" =~ ^lua/([^/]+)/init.lua$ ]]; then
|
|
echo "$lua_file"
|
|
modules+=("${BASH_REMATCH[1]}")
|
|
# Check other lua files
|
|
elif [[ "$lua_file" =~ ^lua/(.*)\.lua$ ]]; then
|
|
echo "$lua_file"
|
|
# Replace slashes with dots to form the module name
|
|
module_name="${BASH_REMATCH[1]//\//.}"
|
|
modules+=("$module_name")
|
|
elif [[ "$lua_file" =~ ^([^/.][^/]*)\.lua$ ]]; then
|
|
echo "$lua_file"
|
|
modules+=("${BASH_REMATCH[1]}")
|
|
fi
|
|
done < <(find "$src" -name '*.lua' | xargs -n 1 realpath --relative-to="$src")
|
|
|
|
nvimRequireCheck=("${modules[@]}")
|
|
echo "Discovered modules: ${nvimRequireCheck[*]}"
|
|
|
|
if [ "${#nvimRequireCheck[@]}" -eq 0 ]; then
|
|
echo "No valid Lua modules found; skipping check"
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# Run require checks on each module in nvimRequireCheck
|
|
run_require_checks() {
|
|
echo "Starting require checks"
|
|
check_passed=false
|
|
failed_modules=()
|
|
successful_modules=()
|
|
|
|
export HOME="$TMPDIR"
|
|
local deps="${dependencies[*]}"
|
|
local nativeCheckInputs="${nativeBuildInputs[*]}"
|
|
local checkInputs="${buildInputs[*]}"
|
|
set +e
|
|
|
|
if [ -v 'nvimSkipModule' ]; then
|
|
nvimSkipModules=("${nvimSkipModule[@]}")
|
|
echo "WARNING: nvimSkipModule got renamed to nvimSkipModules, please update package $name"
|
|
fi
|
|
|
|
for name in "${nvimRequireCheck[@]}"; do
|
|
local skip=false
|
|
for module in "${nvimSkipModules[@]}"; do
|
|
if [[ "$module" == "$name" ]]; then
|
|
echo "$name is in list of modules to not check. Skipping..."
|
|
skip=true
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$skip" = false ]; then
|
|
echo "Attempting to require module: $name"
|
|
if @nvimBinary@ -es --headless -n -u NONE -i NONE --clean -V1 \
|
|
--cmd "set rtp+=$out,${deps// /,}" \
|
|
--cmd "set rtp+=$out,${nativeCheckInputs// /,}" \
|
|
--cmd "set rtp+=$out,${checkInputs// /,}" \
|
|
--cmd "lua require('$name')"; then
|
|
check_passed=true
|
|
successful_modules+=("$name")
|
|
echo "Successfully required module: $name"
|
|
else
|
|
echo "Failed to require module: $name"
|
|
failed_modules+=("$name")
|
|
fi
|
|
fi
|
|
done
|
|
set -e
|
|
}
|
|
|
|
# Define color codes
|
|
GREEN="\033[0;32m"
|
|
RED="\033[0;31m"
|
|
NC="\033[0m" # No Color
|
|
|
|
# Print summary of the require checks
|
|
print_summary() {
|
|
echo -e "\n======================================================"
|
|
if [[ "$check_passed" == "true" ]]; then
|
|
echo -e "${GREEN}Require check succeeded for the following modules:${NC}"
|
|
for module in "${successful_modules[@]}"; do
|
|
echo -e " ${GREEN}- $module${NC}"
|
|
done
|
|
echo "All lua modules were checked."
|
|
else
|
|
echo -e "${RED}No successful require checks.${NC}"
|
|
fi
|
|
|
|
# Print any modules that failed with improved formatting and color
|
|
if [ "${#failed_modules[@]}" -gt 0 ]; then
|
|
echo -e "\n${RED}Require check failed for the following modules:${NC}"
|
|
for module in "${failed_modules[@]}"; do
|
|
echo -e " ${RED}- $module${NC}"
|
|
done
|
|
echo -e "\n${RED}Checkout https://nixos.org/manual/nixpkgs/unstable/#testing-neovim-plugins-neovim-require-check${NC}"
|
|
fi
|
|
echo "======================================================"
|
|
|
|
if [ "${#failed_modules[@]}" -gt 0 ]; then
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Main entry point: orchestrates discovery, require checks, and summary
|
|
neovimRequireCheckHook() {
|
|
echo "Executing neovimRequireCheckHook"
|
|
|
|
if [ "${nvimRequireCheck[*]}" = "" ]; then
|
|
echo "nvimRequireCheck is empty; entering discovery mode"
|
|
# Auto-discovery mode
|
|
if ! discover_modules; then
|
|
echo "No modules found during discovery; exiting hook"
|
|
return
|
|
fi
|
|
else
|
|
echo "nvimRequireCheck is pre-populated; entering manual check mode"
|
|
fi
|
|
|
|
run_require_checks
|
|
print_summary
|
|
}
|
|
|
|
echo "Using neovimRequireCheckHook"
|
|
appendToVar preDistPhases neovimRequireCheckHook
|