From 11b706a03203813d6fcc65191693b70b1a25fbe9 Mon Sep 17 00:00:00 2001 From: Gregory Leeman Date: Mon, 22 Jul 2024 15:52:15 +0100 Subject: [PATCH] lazygit --- after/ftplugin/cpp.vim | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 after/ftplugin/cpp.vim diff --git a/after/ftplugin/cpp.vim b/after/ftplugin/cpp.vim new file mode 100644 index 0000000..c963dd6 --- /dev/null +++ b/after/ftplugin/cpp.vim @@ -0,0 +1,83 @@ +let b:ale_fixers = ['clangtidy', 'clang-format', 'remove_trailing_lines', 'trim_whitespace'] +let b:ale_linters = ['cc', 'ccls', 'clangcheck', 'clangd', 'clangtidy', 'clazy', 'cppcheck', 'cpplint', 'cquery', 'cspell', 'flawfinder'] + +" Function to find the project root +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 to compile the project +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" + + " Extract the project directory name + 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 to run the compiled project +function! RunProject() + let l:project_root = FindProjectRoot() + if l:project_root == "" + echo "Project root not found." + return + endif + + " Extract the project directory name + let l:project_name = fnamemodify(l:project_root, ':t') + let l:output_file = l:project_root . "/" . l:project_name + + " Check if the output file exists + if !filereadable(l:output_file) + echo "Output file not found. Please compile the project first." + return + endif + + " Run the compiled output file + let l:run_cmd = "!" . l:output_file + execute l:run_cmd +endfunction + +" Create the Compile command +command! -nargs=0 Compile call CompileProject(1) +command! -nargs=0 CompileRelease call CompileProject(0) + +" Create the Run command +command! Run call RunProject()