A Neovim plugin enabling you to solve LeetCode problems.
fix: store testcases as `table<string[]>`
3 files changed, +10 -15
+4-5lua/leetcode-ui/group/case.lua
| @@ -9,7 +9,7 @@ local Lines = require("leetcode-ui.lines") | ||
| 9 | 9 | |
| 10 | 10 | local Line = require("leetcode-ui.line") |
| 11 | 11 | |
| 12 | ----@alias case_body { input: string, raw_input: string, output: string, expected: string, std_output: string } | |
| 12 | +---@alias case_body { input: string[], raw_input: string, output: string, expected: string, std_output: string } | |
| 13 | 13 | |
| 14 | 14 | ---@class lc.ui.Case : lc.ui.Group |
| 15 | 15 | ---@field pre lc.ui.Lines |
| @@ -43,17 +43,16 @@ local function split_input(input) | ||
| 43 | 43 | end |
| 44 | 44 | |
| 45 | 45 | ---@private |
| 46 | ----@param input string | |
| 46 | +---@param input string[] | |
| 47 | 47 | function Case:input(input) |
| 48 | 48 | local key = t("Input") |
| 49 | 49 | |
| 50 | 50 | local group = Group({}, { spacing = 1 }) |
| 51 | 51 | |
| 52 | - local s = split_input(input) | |
| 53 | - for i = 1, #s do | |
| 52 | + for i, case in ipairs(input) do | |
| 54 | 53 | local ok, param = pcall(function() return self.question.q.meta_data.params[i].name end) |
| 55 | 54 | if ok then group:append(param .. " =", "leetcode_normal"):endl() end |
| 56 | - group:append(s[i]):endgrp() | |
| 55 | + group:append(case):endgrp() | |
| 57 | 56 | end |
| 58 | 57 | |
| 59 | 58 | local title = Line():append(key, "leetcode_normal") |
+6-6lua/leetcode-ui/popup/console/testcase.lua
| @@ -4,7 +4,7 @@ local ConsolePopup = require("leetcode-ui.popup.console") | ||
| 4 | 4 | local t = require("leetcode.translator") |
| 5 | 5 | |
| 6 | 6 | ---@class lc.ui.Console.TestcasePopup : lc.ui.Console.Popup |
| 7 | ----@field testcases string[] | |
| 7 | +---@field testcases table<string[][]> | |
| 8 | 8 | ---@field extmarks integer[] |
| 9 | 9 | local Testcase = ConsolePopup:extend("LeetTestcasePopup") |
| 10 | 10 | |
| @@ -16,9 +16,10 @@ function Testcase:content() | ||
| 16 | 16 | |
| 17 | 17 | local testcases = {} |
| 18 | 18 | for tcase in vim.gsplit(str, "\n\n") do |
| 19 | - local case = tcase:gsub("\n", " ") | |
| 20 | - table.insert(self.testcases, case) | |
| 21 | - testcases = vim.list_extend(testcases, vim.split(tcase, "\n")) | |
| 19 | + local s = vim.split(tcase, "\n") | |
| 20 | + | |
| 21 | + table.insert(self.testcases, s) | |
| 22 | + testcases = vim.list_extend(testcases, s) | |
| 22 | 23 | end |
| 23 | 24 | |
| 24 | 25 | return testcases |
| @@ -29,8 +30,7 @@ function Testcase:populate() | ||
| 29 | 30 | for i, case in ipairs(self.console.question.q.testcase_list) do |
| 30 | 31 | if i ~= 1 then table.insert(tbl, "") end |
| 31 | 32 | |
| 32 | - -- TODO: Think of a better way to do this. Don't store testcases as a single strings | |
| 33 | - table.insert(self.testcases, case:gsub("\n", " ")[1]) | |
| 33 | + table.insert(self.testcases, vim.split(case, "\n")) | |
| 34 | 34 | |
| 35 | 35 | for s in vim.gsplit(case, "\n", { trimempty = true }) do |
| 36 | 36 | table.insert(tbl, s) |
+0-4lua/leetcode/config/template.lua
| @@ -19,10 +19,6 @@ | ||
| 19 | 19 | ---| "erlang" |
| 20 | 20 | ---| "elixir" |
| 21 | 21 | ---| "bash" |
| 22 | ----| "html" | |
| 23 | ----| "pythonml" | |
| 24 | ----| "react" | |
| 25 | ----| "vanillajs" | |
| 26 | 22 | |
| 27 | 23 | ---@alias lc.hook |
| 28 | 24 | ---| "LeetEnter" |