Merge pull request #35 from barrett-ruth/feat/expand-luasnip-integration
Improve LuaSnip Integration
This commit is contained in:
commit
13415f18d2
2 changed files with 36 additions and 15 deletions
|
|
@ -112,21 +112,18 @@ local function setup_problem(contest_id, problem_id, language)
|
||||||
if vim.api.nvim_buf_get_lines(0, 0, -1, true)[1] == "" then
|
if vim.api.nvim_buf_get_lines(0, 0, -1, true)[1] == "" then
|
||||||
local has_luasnip, luasnip = pcall(require, "luasnip")
|
local has_luasnip, luasnip = pcall(require, "luasnip")
|
||||||
if has_luasnip then
|
if has_luasnip then
|
||||||
vim.api.nvim_buf_set_lines(0, 0, -1, false, { state.platform })
|
local prefixed_trigger = ("cp.nvim/%s.%s"):format(state.platform, language)
|
||||||
vim.api.nvim_win_set_cursor(0, { 1, #state.platform })
|
|
||||||
|
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.cmd.startinsert({ bang = true })
|
||||||
|
|
||||||
vim.schedule(function()
|
vim.schedule(function()
|
||||||
print(
|
|
||||||
"Debug: platform="
|
|
||||||
.. state.platform
|
|
||||||
.. ", filetype="
|
|
||||||
.. vim.bo.filetype
|
|
||||||
.. ", expandable="
|
|
||||||
.. tostring(luasnip.expandable())
|
|
||||||
)
|
|
||||||
if luasnip.expandable() then
|
if luasnip.expandable() then
|
||||||
luasnip.expand()
|
luasnip.expand()
|
||||||
|
else
|
||||||
|
vim.api.nvim_buf_set_lines(0, 0, 1, false, { "" })
|
||||||
|
vim.api.nvim_win_set_cursor(0, { 1, 0 })
|
||||||
end
|
end
|
||||||
vim.cmd.stopinsert()
|
vim.cmd.stopinsert()
|
||||||
end)
|
end)
|
||||||
|
|
@ -214,6 +211,7 @@ local function diff_problem()
|
||||||
if state.diff_mode then
|
if state.diff_mode then
|
||||||
vim.cmd.diffoff()
|
vim.cmd.diffoff()
|
||||||
if state.saved_session then
|
if state.saved_session then
|
||||||
|
vim.cmd(("source %s"):format(state.saved_session))
|
||||||
vim.fn.delete(state.saved_session)
|
vim.fn.delete(state.saved_session)
|
||||||
state.saved_session = nil
|
state.saved_session = nil
|
||||||
end
|
end
|
||||||
|
|
@ -242,13 +240,25 @@ local function diff_problem()
|
||||||
return
|
return
|
||||||
end
|
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()
|
state.saved_session = vim.fn.tempname()
|
||||||
vim.cmd(("mksession! %s"):format(state.saved_session))
|
vim.cmd(("mksession! %s"):format(state.saved_session))
|
||||||
|
|
||||||
vim.cmd("silent only")
|
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.diffthis()
|
||||||
vim.cmd(("vertical diffsplit %s"):format(ctx.output_file))
|
vim.cmd(("vertical diffsplit %s"):format(ctx.expected_file))
|
||||||
state.diff_mode = true
|
state.diff_mode = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
for language, template_set in pairs(template_definitions) do
|
||||||
local snippets = {}
|
local snippets = {}
|
||||||
local filetype = languages.canonical_filetypes[language]
|
local filetype = languages.canonical_filetypes[language]
|
||||||
|
|
||||||
for contest, template in pairs(template_set) do
|
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
|
end
|
||||||
|
|
||||||
for _, snippet in ipairs(config.snippets or {}) do
|
for trigger, snippet in pairs(user_overrides) do
|
||||||
table.insert(snippets, snippet)
|
local prefix_match = trigger:match("^cp%.nvim/[^.]+%.(.+)$")
|
||||||
|
if prefix_match == language then
|
||||||
|
table.insert(snippets, snippet)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
ls.add_snippets(filetype, snippets)
|
ls.add_snippets(filetype, snippets)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue