#!/nix/store/agkxax48k35wdmkhmmija2i2sxg8i7ny-bash-5.2p26/bin/sh # SPDX-License-Identifier: Unlicense # This is free and unencumbered software released into the public domain. # # Anyone is free to copy, modify, publish, use, compile, sell, or distribute # this software, either in source code form or as a compiled binary, for any # purpose, commercial or non-commercial, and by any means. # # In jurisdictions that recognize copyright laws, the author or authors of # this software dedicate any and all copyright interest in the software to # the public domain. We make this dedication for the benefit of the public # at large and to the detriment of our heirs and successors. We intend this # dedication to be an overt act of relinquishment in perpetuity of all # present and future rights to this software under copyright law. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # For more information, please refer to # A shim which acts as a command-line interface adapter to use Neovim as a Lua # interpreter. # Set custom XDG base directory paths to isolate the test Neovim from the # user's own configuration and data files. export XDG_CONFIG_HOME='test/xdg/config/' export XDG_STATE_HOME='test/xdg/local/state/' export XDG_DATA_HOME='test/xdg/local/share/' # Handle Lua command-line arguments; not all options are supported while getopts 'ilEve:' opt; do case $opt in e) lua_expr=$OPTARG;; v) nvim --version; exit;; i | l | E) echo "Option '$opt' not supported by shim"; exit 1;; esac done # We need to add this plugin to the custom configuration. The easiest way is # to create a symlink. Why not always have a symlink in the project? The Lua # language server will search for Lua files in every directory, so if it enters # the symlink it will be trapped in a cycle. What we do instead is create the # symlink only for the duration of a test session and remove it again # afterwards. # We need separate symlinks if we want to run different tasks in parallel. # Otherwise the one the finishes first would delete the symlink from underneath # the one that is still running. uuid=$(uuidgen) mkdir -p ${XDG_DATA_HOME}/nvim/site/pack/self-${uuid}/start/ ln -fs $(pwd) ${XDG_DATA_HOME}/nvim/site/pack/self-${uuid}/start/ if [ -n "$lua_expr" ]; then nvim --headless -c "lua $lua_expr" -c 'quitall!' else # We have to explicitly enable plugins, see ':h -l' nvim --cmd 'set loadplugins' -l $@ fi exit_code=$? rm -rf ${XDG_DATA_HOME}/nvim/site/pack/self-${uuid}/ exit $exit_code