Skip to content

Commit

Permalink
feat: add support for a shell command in place of environment variabl…
Browse files Browse the repository at this point in the history
…e name
  • Loading branch information
abayomi185 committed Mar 17, 2024
1 parent 681fb1d commit dedba7d
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 7 deletions.
37 changes: 30 additions & 7 deletions lua/codecompanion/adapter.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
local log = require("codecompanion.utils.log")
local utils = require("codecompanion.utils.util")

---@class CodeCompanion.Adapter
---@field name string
Expand Down Expand Up @@ -84,19 +85,41 @@ function Adapter:replace_header_vars()
if self.headers then
for k, v in pairs(self.headers) do
self.headers[k] = v:gsub("${(.-)}", function(var)
local env_var = self.env[var]
local env_var_or_cmd = self.env[var]

if not env_var_or_cmd then
log:error("Error: Could not find env var or command: %s", self.env[var])
return vim.notify(
string.format("[CodeCompanion.nvim]\nCould not find env var or command: %s", self.env[var]),
vim.log.levels.ERROR
)
end

if env_var then
env_var = os.getenv(env_var)
if not env_var then
log:error("Error: Could not find env var: %s", self.env[var])
if utils.is_cmd_var(env_var_or_cmd) then
local command = env_var_or_cmd:sub(5)
local handle = io.popen(command, "r")
if handle then
local result = handle:read("*a")
handle:close()
return result:gsub("%s+$", "")
else
log:error("Error: Could not execute command: %s", command)
return vim.notify(
string.format("[CodeCompanion.nvim]\nCould not find env var: %s", self.env[var]),
string.format("[CodeCompanion.nvim]\nCould not execute command: %s", command),
vim.log.levels.ERROR
)
end
return env_var
end

local env_var = os.getenv(env_var_or_cmd)
if not env_var then
log:error("Error: Could not find env var: %s", self.env[var])
return vim.notify(
string.format("[CodeCompanion.nvim]\nCould not find env var: %s", self.env[var]),
vim.log.levels.ERROR
)
end
return env_var
end)
end
end
Expand Down
7 changes: 7 additions & 0 deletions lua/codecompanion/utils/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,11 @@ function M.replace_vars(msg, vars, mapping)
return string.format(msg, unpack(replacements))
end

---Check if value starts with "cmd:"
---@param value string
---@return boolean
function M.is_cmd_var(value)
return value:match("^cmd:")
end

return M

0 comments on commit dedba7d

Please sign in to comment.