Skip to content

Commit ea8790d

Browse files
author
lex
committed
fix: resolve client.global vars in K lookup and copy-as-curl
K now checks state.global_vars and state.script_variables before falling back to unresolved. copy.lua collect_vars() includes session-scoped vars so <leader>rc resolves them too. Strips multi-line pre/post-script blocks from curl output. Closes: session_id set via client.global.set now visible on K and included in curl export
1 parent 4301728 commit ea8790d

2 files changed

Lines changed: 40 additions & 3 deletions

File tree

lua/poste/http/copy.lua

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ local function collect_var_defs(lines)
7575
return vars
7676
end
7777

78-
--- Collect variables from file-level @var defs and env.json
78+
--- Collect variables from file-level @var defs, env.json, and session vars (client.global + script_variables)
7979
local function collect_vars(buf, block_start_line)
8080
local state = require("poste.state")
8181
local file_lines = block_start_line > 1
@@ -93,6 +93,17 @@ local function collect_vars(buf, block_start_line)
9393
for k, v in pairs(env_vars) do
9494
if not vars[k] then vars[k] = v end
9595
end
96+
-- Add session-scoped vars from client.global.set and request.variables.set
97+
if state.global_vars then
98+
for k, v in pairs(state.global_vars) do
99+
vars[k] = v
100+
end
101+
end
102+
if state.script_variables then
103+
for k, v in pairs(state.script_variables) do
104+
vars[k] = v
105+
end
106+
end
96107
return vars
97108
end
98109

@@ -247,10 +258,18 @@ function M.copy_as_curl()
247258
local raw_lines = vim.api.nvim_buf_get_lines(buf, start_line - 1, end_line, false)
248259
local resolved_lines = resolve_request_content(buf, raw_lines, start_line)
249260
local request_lines = {}
261+
local in_script = false
250262

251263
for _, line in ipairs(resolved_lines) do
252-
-- Skip ### separator, comments, and @var definitions
253-
if not line:match("^%s*###") and not line:match("^%s*#") and not line:match("^%s*@%S+") then
264+
if line:match("^%s*###") then
265+
-- skip separator
266+
elseif line:match("^%s*#") or line:match("^%s*@%S+") then
267+
-- skip comments and @var definitions
268+
elseif line:match("^%s*%%}") then
269+
in_script = false
270+
elseif line:match("^%s*[<>]%s*{%%") then
271+
in_script = true
272+
elseif not in_script then
254273
table.insert(request_lines, line)
255274
end
256275
end

lua/poste/http/nav.lua

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,24 @@ function M.show_var_value()
193193
end
194194
end
195195

196+
if not resolved then
197+
-- Check client.global vars (set via pre/post scripts)
198+
local state = require("poste.state")
199+
if state.global_vars and state.global_vars[var_name] then
200+
resolved = state.global_vars[var_name]
201+
source = "client.global (session var)"
202+
end
203+
end
204+
205+
if not resolved then
206+
-- Check script_variables (request.variables.set from post-scripts)
207+
local state = require("poste.state")
208+
if state.script_variables and state.script_variables[var_name] then
209+
resolved = state.script_variables[var_name]
210+
source = "script variable (session var)"
211+
end
212+
end
213+
196214
if not resolved then
197215
local all_lines = vim.api.nvim_buf_get_lines(buf, 0, -1, false)
198216
for _, l in ipairs(all_lines) do

0 commit comments

Comments
 (0)