summaryrefslogtreecommitdiff
path: root/after/ftplugin/cpp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'after/ftplugin/cpp.lua')
-rw-r--r--after/ftplugin/cpp.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/after/ftplugin/cpp.lua b/after/ftplugin/cpp.lua
index f3bcf24..5585ff7 100644
--- a/after/ftplugin/cpp.lua
+++ b/after/ftplugin/cpp.lua
@@ -1 +1,54 @@
vim.opt.cinoptions = 'l1(0'
+
+local cmake_errorformat = table.concat({
+ -- CMake internal error patterns
+ "CMake Error at %f:%l (%m):",
+ "CMake Error at %f:%l:%m",
+ "CMake Error in %f:%m",
+ "CMake Warning at %f:%l (%m):",
+
+ -- GCC / Clang (file:line:col: type: message)
+ "%f:%l:%c: %trror: %m",
+ "%f:%l:%c: %twarning: %m",
+ "%f:%l:%c: %tnote: %m",
+ "%f:%l:%c: %m",
+ "%f:%l: %trror: %m",
+ "%f:%l: %twarning: %m",
+ "%f:%l: %m",
+
+ -- MSVC (file(line): error/warning: message)
+ "%f(%l): %trror %m",
+ "%f(%l): %twarning %m",
+ "%f(%l,%c): %trror %m",
+ "%f(%l,%c): %twarning %m",
+
+ -- GNU Make directory tracking (resolves relative file paths correctly in quickfix)
+ "%D%*\\a[%*\\d]: Entering directory `%f'",
+ "%X%*\\a[%*\\d]: Leaving directory `%f'",
+ "%D%*\\a: Entering directory `%f'",
+ "%X%*\\a: Leaving directory `%f'",
+
+ -- Ignore unmatched compiler continuation/garbage lines
+ "%-G%f:%l: %m",
+ "%-G%s"
+}, ',')
+
+local build_options = {
+ cmake_build = {
+ exe = "cmake",
+ args = { "--build", "build" },
+ errorformat = cmake_errorformat,
+ },
+ bash_build = {
+ exe = "./build.sh",
+ args = {},
+ errorformat = cmake_errorformat,
+ }
+}
+
+vim.keymap.set("n", "<A-b><A-m>", function()
+ vim.fn["neomake#Make"](0, { build_options.cmake_build })
+end)
+vim.keymap.set("n", "<A-b><A-s>", function()
+ vim.fn["neomake#Make"](0, { build_options.bash_build })
+end)