fix(config): easier language default per-contest

This commit is contained in:
Barrett Ruth 2025-09-21 14:16:27 -04:00
parent d4f1678b03
commit e48e70a5f9
3 changed files with 38 additions and 9 deletions

View file

@ -267,12 +267,7 @@ function M.setup(user_config)
error('No language configurations found')
end
if vim.tbl_contains(available_langs, 'cpp') then
contest_config.default_language = 'cpp'
else
table.sort(available_langs)
contest_config.default_language = available_langs[1]
end
contest_config.default_language = available_langs[1]
end
end

View file

@ -159,8 +159,10 @@ end
---@param contest_id string Contest identifier
---@param problem_id string Problem identifier
local function setup_problem(platform, contest_id, problem_id)
local cp = require('cp')
cp.handle_command({ fargs = { platform, contest_id, problem_id } })
vim.schedule(function()
local cp = require('cp')
cp.handle_command({ fargs = { platform, contest_id, problem_id } })
end)
end
M.get_platforms = get_platforms

View file

@ -169,7 +169,7 @@ describe('cp.config', function()
assert.equals('cpp', result.contests.test.default_language)
end)
it('sets default_language to first available when cpp not present', function()
it('sets default_language to single available language when only one configured', function()
local user_config = {
contests = {
test = {
@ -183,6 +183,38 @@ describe('cp.config', function()
assert.equals('python', result.contests.test.default_language)
end)
it('sets default_language to single available language even when not cpp', function()
local user_config = {
contests = {
test = {
rust = {
test = { './target/release/solution' },
extension = 'rs'
},
},
},
}
local result = config.setup(user_config)
assert.equals('rust', result.contests.test.default_language)
end)
it('uses first available language when multiple configured', function()
local user_config = {
contests = {
test = {
python = { test = { 'python3' } },
cpp = { compile = { 'g++' } },
},
},
}
local result = config.setup(user_config)
assert.is_true(vim.tbl_contains({'cpp', 'python'}, result.contests.test.default_language))
end)
it('preserves explicit default_language', function()
local user_config = {
contests = {