From fe3401048abe3efc44512b5fb0b85c52a0150d6b Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Mon, 15 Sep 2025 14:50:07 -0400 Subject: [PATCH 1/3] feat: fix luasnip integration --- lua/cp/init.lua | 20 ++++++++++---------- lua/cp/snippets.lua | 17 ++++++++++++++--- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/lua/cp/init.lua b/lua/cp/init.lua index 6ea45da..b815926 100644 --- a/lua/cp/init.lua +++ b/lua/cp/init.lua @@ -112,21 +112,21 @@ local function setup_problem(contest_id, problem_id, language) if vim.api.nvim_buf_get_lines(0, 0, -1, true)[1] == "" then local has_luasnip, luasnip = pcall(require, "luasnip") if has_luasnip then - vim.api.nvim_buf_set_lines(0, 0, -1, false, { state.platform }) - vim.api.nvim_win_set_cursor(0, { 1, #state.platform }) + local languages = require("cp.languages") + local file_ext = vim.fn.expand("%:e") + local language = languages.filetype_to_language[file_ext] or "cpp" + local prefixed_trigger = ("cp.nvim/%s.%s"):format(state.platform, language) + + vim.api.nvim_buf_set_lines(0, 0, -1, false, { prefixed_trigger }) + vim.api.nvim_win_set_cursor(0, { 1, #prefixed_trigger }) vim.cmd.startinsert({ bang = true }) vim.schedule(function() - print( - "Debug: platform=" - .. state.platform - .. ", filetype=" - .. vim.bo.filetype - .. ", expandable=" - .. tostring(luasnip.expandable()) - ) if luasnip.expandable() then luasnip.expand() + else + vim.api.nvim_buf_set_lines(0, 0, 1, false, { "" }) + vim.api.nvim_win_set_cursor(0, { 1, 0 }) end vim.cmd.stopinsert() end) diff --git a/lua/cp/snippets.lua b/lua/cp/snippets.lua index 4906faa..eaadab9 100644 --- a/lua/cp/snippets.lua +++ b/lua/cp/snippets.lua @@ -100,16 +100,27 @@ if __name__ == "__main__": }, } + local user_overrides = {} + for _, snippet in ipairs(config.snippets or {}) do + user_overrides[snippet.trigger] = snippet + end + for language, template_set in pairs(template_definitions) do local snippets = {} local filetype = languages.canonical_filetypes[language] for contest, template in pairs(template_set) do - table.insert(snippets, s(contest, fmt(template, { i(1) }))) + local prefixed_trigger = ("cp.nvim/%s.%s"):format(contest, language) + if not user_overrides[prefixed_trigger] then + table.insert(snippets, s(prefixed_trigger, fmt(template, { i(1) }))) + end end - for _, snippet in ipairs(config.snippets or {}) do - table.insert(snippets, snippet) + for trigger, snippet in pairs(user_overrides) do + local prefix_match = trigger:match("^cp%.nvim/[^.]+%.(.+)$") + if prefix_match == language then + table.insert(snippets, snippet) + end end ls.add_snippets(filetype, snippets) From 7e680b505ac0657151778389d8fb32ce4f157b0e Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Mon, 15 Sep 2025 14:52:53 -0400 Subject: [PATCH 2/3] feat(window): organize :CP diff better --- lua/cp/init.lua | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lua/cp/init.lua b/lua/cp/init.lua index b815926..a29eed5 100644 --- a/lua/cp/init.lua +++ b/lua/cp/init.lua @@ -214,6 +214,7 @@ local function diff_problem() if state.diff_mode then vim.cmd.diffoff() if state.saved_session then + vim.cmd(("source %s"):format(state.saved_session)) vim.fn.delete(state.saved_session) state.saved_session = nil end @@ -242,13 +243,25 @@ local function diff_problem() return end + local output_lines = vim.fn.readfile(ctx.output_file) + local actual_output = {} + for i = 1, #output_lines do + if output_lines[i]:match("^%[code%]:") then + break + end + table.insert(actual_output, output_lines[i]) + end + + state.temp_output = vim.fn.tempname() + vim.fn.writefile(actual_output, state.temp_output) + state.saved_session = vim.fn.tempname() vim.cmd(("mksession! %s"):format(state.saved_session)) vim.cmd("silent only") - vim.cmd(("edit %s"):format(ctx.expected_file)) + vim.cmd(("edit %s"):format(state.temp_output)) vim.cmd.diffthis() - vim.cmd(("vertical diffsplit %s"):format(ctx.output_file)) + vim.cmd(("vertical diffsplit %s"):format(ctx.expected_file)) state.diff_mode = true end From 6e5dd1727ee4cd8ca8f8ff59edb493db15d3c21e Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Mon, 15 Sep 2025 14:54:14 -0400 Subject: [PATCH 3/3] fix(ci/selene): remove unused variable --- lua/cp/init.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/lua/cp/init.lua b/lua/cp/init.lua index a29eed5..893a50f 100644 --- a/lua/cp/init.lua +++ b/lua/cp/init.lua @@ -112,9 +112,6 @@ local function setup_problem(contest_id, problem_id, language) if vim.api.nvim_buf_get_lines(0, 0, -1, true)[1] == "" then local has_luasnip, luasnip = pcall(require, "luasnip") if has_luasnip then - local languages = require("cp.languages") - local file_ext = vim.fn.expand("%:e") - local language = languages.filetype_to_language[file_ext] or "cpp" local prefixed_trigger = ("cp.nvim/%s.%s"):format(state.platform, language) vim.api.nvim_buf_set_lines(0, 0, -1, false, { prefixed_trigger })