Compare commits

..

No commits in common. "96d0f73eedc8dfd302dfb75220ac02a3dc29d007" and "ecd3bd4898f79689a3f5bf956877ea42c7b3072e" have entirely different histories.

2 changed files with 27 additions and 49 deletions

View file

@ -1,7 +1,5 @@
# direnv.nvim # direnv.nvim
[direnv]: https://direnv.net/
Dead simple Neovim plugin to add automatic Direnv loading, inspired by Dead simple Neovim plugin to add automatic Direnv loading, inspired by
`direnv.vim` and written in Lua for better performance and maintainability. `direnv.vim` and written in Lua for better performance and maintainability.
@ -17,14 +15,13 @@ Dead simple Neovim plugin to add automatic Direnv loading, inspired by
### 📓 TODO ### 📓 TODO
`direnv.nvim` is generally feature complete. There are no major planned There are things direnv.nvim can _not_ yet do. Mainly, we would like to
features, and it should be considered stable for the most part. What integrate Treesitter for **syntax highlighting** similar to direnv.vim.
`direnv.nvim` _cannot_ do yet is **syntax highlighting** similar to `direnv.vim` Unfortunately there isn't a TS grammar for Direnv, but we can port syntax.vim
but this is planned to be remedied through either using Treesitter, or by from direnv.vim.
porting `direnv.vim`'s syntax.vim.'
Feature requests are welcome. Please create an issue to describe the feature Additionally, it might be worth adding an option to allow direnv on, e.g.,
that you would like to see. VimEnter if the user has configured to do so.
## 📦 Installation ## 📦 Installation
@ -34,7 +31,7 @@ You will need to call the setup function to load the plugin.
### Prerequisites ### Prerequisites
- Neovim 0.8.0 or higher - Neovim 0.8.0 or higher
- [direnv] v2.33.0 or later installed and available in your PATH - [direnv](https://direnv.net/) installed and available in your PATH
### Using lazy.nvim ### Using lazy.nvim

View file

@ -164,14 +164,6 @@ M._get_rc_status = function(callback)
local ok, status = pcall(vim.json.decode, obj.stdout) local ok, status = pcall(vim.json.decode, obj.stdout)
if not ok or not status or not status.state then if not ok or not status or not status.state then
vim.schedule(function()
notify(
"Failed to parse direnv status. Your version of direnv may not support JSON output. "
.. "Please ensure you have direnv v2.33.0 or later installed. "
.. "You can verify by running: direnv status --json",
vim.log.levels.ERROR
)
end)
for _, cb in ipairs(pending_callbacks) do for _, cb in ipairs(pending_callbacks) do
cb(nil, nil) cb(nil, nil)
end end
@ -207,11 +199,6 @@ M._get_rc_status = function(callback)
) )
end end
M.refresh_status = function()
cache.status = nil
M._get_rc_status(function() end)
end
--- Initialize direnv for current directory --- Initialize direnv for current directory
--- @param path string Path to .envrc file --- @param path string Path to .envrc file
M._init = function(path) M._init = function(path)
@ -237,21 +224,13 @@ M._init = function(path)
end end
vim.schedule(function() vim.schedule(function()
local ok, env = pcall(vim.json.decode, obj.stdout) local env_commands = vim.split(obj.stdout, "\n")
if #env_commands > 0 then
if not ok or type(env) ~= "table" then for _, cmd in ipairs(env_commands) do
notify("Failed to parse direnv JSON output", vim.log.levels.ERROR) if cmd ~= "" then
return pcall(function()
end vim.cmd(cmd)
end)
for key, value in pairs(env) do
if value == vim.NIL or value == nil then
vim.env[key] = nil
else
if type(value) ~= "string" then
value = tostring(value)
end
vim.env[key] = value
end end
end end
@ -265,11 +244,12 @@ M._init = function(path)
"User", "User",
{ pattern = "DirenvLoaded", modeline = false } { pattern = "DirenvLoaded", modeline = false }
) )
end
end) end)
end end
vim.system( vim.system(
{ M.config.bin, "export", "json" }, { M.config.bin, "export", "vim" },
{ text = true, cwd = cwd }, { text = true, cwd = cwd },
on_exit on_exit
) )
@ -629,7 +609,7 @@ M.setup = function(user_config)
pattern = ".envrc", pattern = ".envrc",
group = group_id, group = group_id,
callback = function() callback = function()
M.refresh_status() cache.status = nil
notify( notify(
".envrc file changed. Run :Direnv allow to activate changes.", ".envrc file changed. Run :Direnv allow to activate changes.",
vim.log.levels.INFO vim.log.levels.INFO
@ -639,7 +619,8 @@ M.setup = function(user_config)
-- Expose a command to refresh the statusline value without triggering reload -- Expose a command to refresh the statusline value without triggering reload
vim.api.nvim_create_user_command("DirenvStatuslineRefresh", function() vim.api.nvim_create_user_command("DirenvStatuslineRefresh", function()
M.refresh_status() cache.last_check = 0
M._get_rc_status(function() end)
end, {}) end, {})
M._get_rc_status(function() end) M._get_rc_status(function() end)