summaryrefslogtreecommitdiff
path: root/after/ftplugin/cpp.lua
blob: 5585ff765291a60c1b3d6ae89b3711961f160f62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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)