From e48e70a5f94e13101635b60282b571b02a881047 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Sun, 21 Sep 2025 14:16:27 -0400 Subject: [PATCH] fix(config): easier language default per-contest --- lua/cp/config.lua | 7 +------ lua/cp/pickers/init.lua | 6 ++++-- spec/config_spec.lua | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/lua/cp/config.lua b/lua/cp/config.lua index 838107b..513dcef 100644 --- a/lua/cp/config.lua +++ b/lua/cp/config.lua @@ -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 diff --git a/lua/cp/pickers/init.lua b/lua/cp/pickers/init.lua index 5a1b644..b981b59 100644 --- a/lua/cp/pickers/init.lua +++ b/lua/cp/pickers/init.lua @@ -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 diff --git a/spec/config_spec.lua b/spec/config_spec.lua index f3f3738..6bff123 100644 --- a/spec/config_spec.lua +++ b/spec/config_spec.lua @@ -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 = {