|
|
|
let b:ale_fixers = {
|
|
|
|
\ 'cpp' : [
|
|
|
|
\ 'clangtidy',
|
|
|
|
\ 'clang-format',
|
|
|
|
\ 'remove_trailing_lines',
|
|
|
|
\ 'trim_whitespace'
|
|
|
|
\ ]
|
|
|
|
\ }
|
|
|
|
|
|
|
|
let b:ale_linters = {
|
|
|
|
\ 'cpp' : [
|
|
|
|
\ 'cc',
|
|
|
|
\ 'ccls',
|
|
|
|
\ 'clangcheck',
|
|
|
|
\ 'clangd',
|
|
|
|
\ 'clangtidy',
|
|
|
|
\ 'clazy',
|
|
|
|
\ 'cppcheck',
|
|
|
|
\ 'cpplint',
|
|
|
|
\ 'cquery',
|
|
|
|
\ 'cspell',
|
|
|
|
\ 'flawfinder'
|
|
|
|
\ ]
|
|
|
|
\ }
|
|
|
|
|
|
|
|
function! FindProjectRoot()
|
|
|
|
let l:current_dir = expand('%:p:h')
|
|
|
|
while l:current_dir != "/"
|
|
|
|
if filereadable(l:current_dir . "/main.cpp")
|
|
|
|
return l:current_dir
|
|
|
|
endif
|
|
|
|
let l:current_dir = fnamemodify(l:current_dir, ':h')
|
|
|
|
endwhile
|
|
|
|
return ""
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! CompileProject(debug)
|
|
|
|
let l:project_root = FindProjectRoot()
|
|
|
|
if l:project_root == ""
|
|
|
|
echo "main.cpp not found in any parent directory."
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
let l:main_file = l:project_root . "/main.cpp"
|
|
|
|
|
|
|
|
let l:project_name = fnamemodify(l:project_root, ':t')
|
|
|
|
let l:output_file = l:project_root . "/" . l:project_name
|
|
|
|
|
|
|
|
let l:warning_flags = "-Wall -Weffc++ -Wextra -Wconversion -Wsign-conversion"
|
|
|
|
let l:disable_extension_flags = "-pedantic-errors"
|
|
|
|
let l:debug_flags = a:debug ? "-ggdb" : "-O2 -DNDEBUG"
|
|
|
|
let l:standard_flag = "-std=c++20"
|
|
|
|
|
|
|
|
let l:compile_cmd =
|
|
|
|
\ "g++" . " " .
|
|
|
|
\ l:standard_flag . " " .
|
|
|
|
\ l:warning_flags . " " .
|
|
|
|
\ l:disable_extension_flags . " " .
|
|
|
|
\ l:debug_flags . " " .
|
|
|
|
\ l:main_file . " " .
|
|
|
|
\ "-o" . " " . l:output_file
|
|
|
|
|
|
|
|
" Run the compile command and capture the output
|
|
|
|
let l:output = system(l:compile_cmd)
|
|
|
|
|
|
|
|
" Check if the compilation was successful
|
|
|
|
if v:shell_error
|
|
|
|
echo "Compilation failed:"
|
|
|
|
echo l:output
|
|
|
|
else
|
|
|
|
echo "Compilation successful. Output: " . l:output_file
|
|
|
|
endif
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! RunProject()
|
|
|
|
let l:project_root = FindProjectRoot()
|
|
|
|
if l:project_root == ""
|
|
|
|
echo "Project root not found."
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
let l:project_name = fnamemodify(l:project_root, ':t')
|
|
|
|
let l:output_file = l:project_root . "/" . l:project_name
|
|
|
|
|
|
|
|
if !filereadable(l:output_file)
|
|
|
|
echo "Output file not found. Please compile the project first."
|
|
|
|
return
|
|
|
|
endif
|
|
|
|
|
|
|
|
let l:run_cmd = "!" . l:output_file
|
|
|
|
execute l:run_cmd
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
command! -nargs=0 Compile call CompileProject(1)
|
|
|
|
command! -nargs=0 CompileRelease call CompileProject(0)
|
|
|
|
command! -nargs=0 Run call RunProject()
|