From 286d21cd0edbd9b5022d94c6f3c73b90c69d38a7 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Fri, 12 Sep 2025 08:49:22 -0500 Subject: [PATCH] update config for cpp versions --- lua/cp/config.lua | 45 +++++++++++++++++++++++++++++++++++++++++---- lua/cp/init.lua | 5 +++++ templates/.clangd | 33 --------------------------------- templates/makefile | 1 - 4 files changed, 46 insertions(+), 38 deletions(-) delete mode 100644 templates/.clangd diff --git a/lua/cp/config.lua b/lua/cp/config.lua index 3fcf4d1..5860363 100644 --- a/lua/cp/config.lua +++ b/lua/cp/config.lua @@ -2,15 +2,52 @@ local M = {} M.defaults = { contests = { - atcoder = { cpp_version = 23 }, - codeforces = { cpp_version = 23 }, - cses = { cpp_version = 20 }, + default = { + cpp_version = 20, + compile_flags = { "-O2", "-DLOCAL", "-Wall", "-Wextra" }, + debug_flags = { "-g3", "-fsanitize=address,undefined", "-DLOCAL" }, + timeout_ms = 2000, + }, + atcoder = { + cpp_version = 23, + }, + codeforces = { + cpp_version = 23, + }, + cses = {}, }, snippets = {}, } +local function extend_contest_config(base_config, contest_config) + local result = vim.deepcopy(base_config) + + for key, value in pairs(contest_config) do + if key == "compile_flags" or key == "debug_flags" then + vim.list_extend(result[key], value) + else + result[key] = value + end + end + + local std_flag = ("-std=c++%d"):format(result.cpp_version) + table.insert(result.compile_flags, 1, std_flag) + table.insert(result.debug_flags, 1, std_flag) + + return result +end + function M.setup(user_config) - return vim.tbl_deep_extend("force", M.defaults, user_config or {}) + local config = vim.tbl_deep_extend("force", M.defaults, user_config or {}) + + local default_contest = config.contests.default + for contest_name, contest_config in pairs(config.contests) do + if contest_name ~= "default" then + config.contests[contest_name] = extend_contest_config(default_contest, contest_config) + end + end + + return config end return M diff --git a/lua/cp/init.lua b/lua/cp/init.lua index 98a44e6..fb73e63 100644 --- a/lua/cp/init.lua +++ b/lua/cp/init.lua @@ -8,6 +8,11 @@ local function log(msg, level) vim.notify(("[cp.nvim]: %s"):format(msg), level or vim.log.levels.INFO) end +if not vim.fn.has("nvim-0.10.0") then + log("cp.nvim requires Neovim 0.10.0+", vim.log.levels.ERROR) + return M +end + local function clearcol() vim.api.nvim_set_option_value("number", false, { scope = "local" }) vim.api.nvim_set_option_value("relativenumber", false, { scope = "local" }) diff --git a/templates/.clangd b/templates/.clangd deleted file mode 100644 index e5046e6..0000000 --- a/templates/.clangd +++ /dev/null @@ -1,33 +0,0 @@ -CompileFlags: - Add: - -O2 - -Wall - -Wextra - -Wpedantic - -Wshadow - -Wformat=2 - -Wfloat-equal - -Wlogical-op - -Wshift-overflow=2 - -Wnon-virtual-dtor - -Wold-style-cast - -Wcast-qual - -Wuseless-cast - -Wno-sign-promotion - -Wcast-align - -Wunused - -Woverloaded-virtual - -Wconversion - -Wsign-conversion - -Wmisleading-indentation - -Wduplicated-cond - -Wduplicated-branches - -Wlogical-op - -Wnull-dereference - -Wformat=2 - -Wformat-overflow - -Wformat-truncation - -Wdouble-promotion - -Wundef - -DLOCAL - -Wno-unknown-pragmas diff --git a/templates/makefile b/templates/makefile index 30acf70..0ae8c41 100644 --- a/templates/makefile +++ b/templates/makefile @@ -19,7 +19,6 @@ setup: test -d build || mkdir -p build test -d io || mkdir -p io test -f compile_flags.txt && echo -std=c++$(VERSION) >>compile_flags.txt - test -f .clangd && echo -e "\t\t-std=c++$(VERSION)" >>.clangd init: make setup