diff --git a/.vscode/settings.json b/.vscode/settings.json index beae3a5..bfaec0d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,88 @@ "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json", "C_Cpp.default.cppStandard": "c++17", "C_Cpp.default.cStandard": "c11", - "C_Cpp.default.intelliSenseMode": "linux-gcc-x64" + "C_Cpp.default.intelliSenseMode": "linux-gcc-x64", + "C_Cpp.clang_format_style": "file", + "C_Cpp.clang_format_fallbackStyle": "none", + "C_Cpp.clang_format_path": "", + "C_Cpp.vcFormat.indent.braces": false, + "C_Cpp.vcFormat.indent.multiLineRelativeToOpeningBrace": false, + "C_Cpp.vcFormat.indent.withinParentheses": "indent", + "C_Cpp.vcFormat.indent.preserveWithinParentheses": false, + "C_Cpp.vcFormat.indent.caseLabels": false, + "C_Cpp.vcFormat.indent.caseContents": true, + "C_Cpp.vcFormat.indent.caseContentsWhenBlock": false, + "C_Cpp.vcFormat.indent.lambdaBracesWhenParameter": true, + "C_Cpp.vcFormat.indent.gotoLabels": "leftmostColumn", + "C_Cpp.vcFormat.indent.preprocessor": "leftmostColumn", + "C_Cpp.vcFormat.indent.accessSpecifiers": false, + "C_Cpp.vcFormat.indent.namespaceContents": true, + "C_Cpp.vcFormat.newLine.beforeOpenBrace.namespace": "newLine", + "C_Cpp.vcFormat.newLine.beforeOpenBrace.type": "newLine", + "C_Cpp.vcFormat.newLine.beforeOpenBrace.function": "newLine", + "C_Cpp.vcFormat.newLine.beforeOpenBrace.block": "newLine", + "C_Cpp.vcFormat.newLine.beforeOpenBrace.lambda": "newLine", + "C_Cpp.vcFormat.newLine.beforeElse": false, + "C_Cpp.vcFormat.newLine.beforeCatch": true, + "C_Cpp.vcFormat.newLine.beforeWhileInDoWhile": false, + "C_Cpp.vcFormat.space.beforeFunctionOpenParenthesis": "remove", + "C_Cpp.vcFormat.space.withinParameterListParentheses": false, + "C_Cpp.vcFormat.space.betweenEmptyParameterListParentheses": false, + "C_Cpp.vcFormat.space.afterKeywordsInControlFlowStatements": true, + "C_Cpp.vcFormat.space.withinControlFlowStatementParentheses": false, + "C_Cpp.vcFormat.space.beforeLambdaOpenParenthesis": false, + "C_Cpp.vcFormat.space.withinCastParentheses": false, + "C_Cpp.vcFormat.space.afterCastCloseParenthesis": false, + "C_Cpp.vcFormat.space.withinExpressionParentheses": false, + "C_Cpp.vcFormat.space.beforeBlockOpenBrace": true, + "C_Cpp.vcFormat.space.betweenEmptyBraces": false, + "C_Cpp.vcFormat.space.beforeInitializerListOpenBrace": false, + "C_Cpp.vcFormat.space.withinInitializerListBraces": true, + "C_Cpp.vcFormat.space.preserveInInitializerList": true, + "C_Cpp.vcFormat.space.beforeOpenSquareBracket": false, + "C_Cpp.vcFormat.space.withinSquareBrackets": false, + "C_Cpp.vcFormat.space.beforeEmptySquareBrackets": false, + "C_Cpp.vcFormat.space.betweenEmptySquareBrackets": false, + "C_Cpp.vcFormat.space.groupSquareBrackets": true, + "C_Cpp.vcFormat.space.withinLambdaBrackets": false, + "C_Cpp.vcFormat.space.betweenEmptyLambdaBrackets": false, + "C_Cpp.vcFormat.space.beforeComma": false, + "C_Cpp.vcFormat.space.afterComma": true, + "C_Cpp.vcFormat.space.removeAroundMemberOperators": true, + "C_Cpp.vcFormat.space.beforeInheritanceColon": true, + "C_Cpp.vcFormat.space.beforeConstructorColon": true, + "C_Cpp.vcFormat.space.removeBeforeSemicolon": true, + "C_Cpp.vcFormat.space.insertAfterSemicolon": true, + "C_Cpp.vcFormat.space.removeAroundUnaryOperator": true, + "C_Cpp.vcFormat.space.aroundBinaryOperator": "insert", + "C_Cpp.vcFormat.space.aroundAssignmentOperator": "insert", + "C_Cpp.vcFormat.space.pointerReferenceAlignment": "right", + "C_Cpp.vcFormat.space.aroundTernaryOperator": "insert", + "C_Cpp.vcFormat.wrap.preserveBlocks": "oneLiners", + "editor.formatOnSave": true, + "editor.formatOnType": true, + "editor.rulers": [100], + "editor.tabSize": 8, + "editor.insertSpaces": false, + "files.trimTrailingWhitespace": true, + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "[c]": { + "editor.defaultFormatter": "ms-vscode.cpptools", + "editor.formatOnSave": true, + "editor.tabSize": 8, + "editor.insertSpaces": false + }, + "[cpp]": { + "editor.defaultFormatter": "ms-vscode.cpptools", + "editor.formatOnSave": true, + "editor.tabSize": 8, + "editor.insertSpaces": false + }, + "[h]": { + "editor.defaultFormatter": "ms-vscode.cpptools", + "editor.formatOnSave": true, + "editor.tabSize": 8, + "editor.insertSpaces": false + } } diff --git a/scripts/install_clang_format_hook.sh b/scripts/install_clang_format_hook.sh new file mode 100755 index 0000000..7af81ad --- /dev/null +++ b/scripts/install_clang_format_hook.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Function to print error messages in red +print_error() { + echo -e "\033[0;31mError: $1\033[0m" +} + +# Check if clang-format is available +if ! command -v clang-format &> /dev/null +then + print_error "clang-format is not installed or not in your PATH. Please install it to use this pre-commit hook." + exit 1 +fi + +# Define the pre-commit hook content +HOOK_CONTENT='''#!/bin/bash + +# Function to print error messages in red +print_error() { + echo -e "\033[0;31mError: $1\033[0m" +} + +# Check if clang-format is available +if ! command -v clang-format &> /dev/null +then + print_error "clang-format is not installed or not in your PATH. Cannot format files." + exit 1 +fi + +# Get all staged C/C++/Objective-C/C++ files +FILES_TO_FORMAT=$(git diff --cached --name-only --diff-filter=ACM | grep -E "\.(c|h|cpp|hpp|cc|hh|cxx|hxx|m|mm)$") + +if [ -z "$FILES_TO_FORMAT" ]; then + exit 0 +fi + +for FILE in $FILES_TO_FORMAT +do + # Check if the file exists and is a regular file + if [ -f "$FILE" ]; then + # Format the file and check for changes + clang-format -style=file -i "$FILE" + if ! git diff --quiet "$FILE"; then + git add "$FILE" + echo "Formatted $FILE with clang-format." + fi + fi +done + +exit 0 +''' + +# Install the pre-commit hook +HOOK_PATH=".git/hooks/pre-commit" + +# Create the hooks directory if it doesn't exist +mkdir -p .git/hooks + +echo "$HOOK_CONTENT" > "$HOOK_PATH" +chmod +x "$HOOK_PATH" + +echo "Git pre-commit hook for clang-format installed successfully."