Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 69e6b41

Browse files
committed
feat: store testcase snapshots
1 parent 7cf551b commit 69e6b41

File tree

5 files changed

+44
-21
lines changed

5 files changed

+44
-21
lines changed

lua/leetcode-ui/group/cases.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ function Cases:init(item, parent)
5959
self.console = parent
6060

6161
local total = item.total_testcases ~= vim.NIL and item.total_testcases or 0
62+
local testcases = parent.testcase:by_id(item.submission_id)
63+
6264
for i = 1, total do
6365
self.cases[i] = Case({
64-
-- TODO: cache the testcases on submission,
65-
-- so it doesn't get out of sync
66-
input = self.console.testcase.testcases[i],
66+
input = testcases[i],
6767
output = item.code_answer[i],
6868
expected = item.expected_code_answer[i],
6969
std_output = item.std_output_list[i],

lua/leetcode-ui/popup/console/testcase.lua

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,53 @@ local t = require("leetcode.translator")
55

66
---@class lc.ui.Console.TestcasePopup : lc.ui.Console.Popup
77
---@field testcases table<string[]>
8+
---@field testcase_len integer
89
---@field extmarks integer[]
10+
---@field snapshots table<string, string[]>
911
local Testcase = ConsolePopup:extend("LeetTestcasePopup")
1012

1113
function Testcase:content()
12-
self.testcases = {}
14+
local lines = vim.api.nvim_buf_get_lines(self.bufnr, 0, -1, false)
15+
lines = vim.tbl_filter(function(line) return line ~= "" end, lines)
16+
return table.concat(lines, "\n")
17+
end
18+
19+
function Testcase:snapshot(id, data) --
20+
if not data.test_case then return end
21+
self.testcases[id] = data.test_case
22+
end
23+
24+
---@return string[][]
25+
function Testcase:by_id(id) --
26+
local testcases = {} ---@type string[][]
1327

14-
local tbl = vim.api.nvim_buf_get_lines(self.bufnr, 0, -1, false)
15-
local str = table.concat(tbl, "\n")
28+
local i, n = 0, self.testcase_len
29+
for case in vim.gsplit(self.testcases[id] or "", "\n") do
30+
local j = math.floor(i / n) + 1
1631

17-
local testcases = {}
18-
for tcase in vim.gsplit(str, "\n\n") do
19-
local s = vim.split(tcase, "\n")
32+
if not testcases[j] then testcases[j] = {} end
33+
table.insert(testcases[j], case)
2034

21-
table.insert(self.testcases, s)
22-
testcases = vim.list_extend(testcases, s)
35+
i = i + 1
2336
end
2437

2538
return testcases
2639
end
2740

2841
function Testcase:populate()
29-
local tbl = {}
30-
for i, case in ipairs(self.console.question.q.testcase_list) do
31-
if i ~= 1 then table.insert(tbl, "") end
42+
local lines = {}
3243

33-
table.insert(self.testcases, vim.split(case, "\n"))
44+
local t_list = self.console.question.q.testcase_list
45+
self.testcase_len = #vim.split(t_list[1] or "", "\n")
3446

47+
for i, case in ipairs(t_list) do
48+
if i ~= 1 then table.insert(lines, "") end
3549
for s in vim.gsplit(case, "\n", { trimempty = true }) do
36-
table.insert(tbl, s)
50+
table.insert(lines, s)
3751
end
3852
end
3953

40-
vim.api.nvim_buf_set_lines(self.bufnr, 0, -1, false, tbl)
41-
54+
vim.api.nvim_buf_set_lines(self.bufnr, 0, -1, false, lines)
4255
return self:draw_extmarks()
4356
end
4457

@@ -140,6 +153,7 @@ function Testcase:mount()
140153

141154
self.testcases = {}
142155
self.extmarks = {}
156+
self.testcase_len = 0
143157

144158
self:autocmds()
145159
self:populate()
@@ -172,6 +186,7 @@ function Testcase:init(parent)
172186

173187
self.testcases = {}
174188
self.extmarks = {}
189+
self.testcase_len = 0
175190

176191
self:populate()
177192
end

lua/leetcode/api/interpreter.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,9 @@ function interpreter.run(submit, q, body, callback)
8383
end
8484
callback(nil, nil, err)
8585
else
86-
q.console.result:clear()
8786
local id = submit and res.submission_id or res.interpret_id
87+
q.console.testcase:snapshot(id, res)
88+
q.console.result:clear()
8889
interpreter.listener(id, callback)
8990
end
9091
end,

lua/leetcode/logger/spinner/init.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function spinner:spin()
5050

5151
self.index = (self.index + 1) % #stype.frames
5252

53-
local fps = 1000 / #stype.frames
53+
local fps = math.floor(1000 / #stype.frames)
5454
vim.defer_fn(function() self:spin() end, fps)
5555
end
5656

@@ -63,6 +63,9 @@ function spinner:set(msg, lvl, opts)
6363
if msg then self:update(msg) end
6464
lvl = lvl or vim.log.levels.INFO
6565

66+
local log = require("leetcode.logger")
67+
log.debug(self.noti)
68+
6669
opts = vim.tbl_deep_extend("force", {
6770
hide_from_history = true,
6871
title = config.name,
@@ -97,6 +100,10 @@ function spinner:stop(msg, success, opts)
97100

98101
self.spinner = nil
99102
local lvl = vim.log.levels[success and "INFO" or "ERROR"]
103+
104+
local log = require("leetcode.logger")
105+
log.debug({ noti = self.noti, msg = "spinner stop" })
106+
100107
self:set(msg, lvl, opts)
101108
end
102109

lua/leetcode/runner/init.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function Runner:handle(submit)
3636
lang = question.lang,
3737
typed_code = self.question:lines(submit),
3838
question_id = question.q.id,
39-
data_input = not submit and table.concat(question.console.testcase:content(), "\n") or nil,
39+
data_input = not submit and question.console.testcase:content(),
4040
}
4141

4242
local judge = Judge:init()

0 commit comments

Comments
 (0)