Skip to content

Commit

Permalink
Autoformatter using clang-format. [skip build]
Browse files Browse the repository at this point in the history
  • Loading branch information
neoblizz committed Jan 22, 2023
1 parent 9c28e85 commit 4900117
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
34 changes: 34 additions & 0 deletions .github/workflows/clang-format.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: clang-format

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main, dev ]

jobs:
formatting-check:
name: Format
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}

- name: Install clang-format
run: |
pip install clang-format \
&& clang-format --version
shell: bash

- name: Format files
run: ${{github.workspace}}/scripts/format.sh ${{github.workspace}} y
shell: bash

- name: Commit changes
uses: EndBug/add-and-commit@v9
with:
committer_name: GitHub Actions
committer_email: 41898282+github-actions[bot]@users.noreply.github.com
message: ':octocat: Applied clang-format.'
add: '*.hpp *.cpp *.cu *.cuh *.hxx *.cxx'
55 changes: 55 additions & 0 deletions scripts/format.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/env bash

# By Gabriel Staples
# For documentation on this file, see my answer here:
# [my answer] How to call clang-format over a cpp project folder?:
# https://stackoverflow.com/a/65988393/4561887

# See my ans: https://stackoverflow.com/a/60157372/4561887
INPUT_PATH_TO_FILES=${1:-"./"}
FULL_PATH_TO_SCRIPT="$(realpath "$INPUT_PATH_TO_FILES")"
SCRIPT_DIRECTORY="$(dirname "$FULL_PATH_TO_SCRIPT")"

RETURN_CODE_SUCCESS=0
RETURN_CODE_ERROR=1

# Find all files in SCRIPT_DIRECTORY with one of these extensions
FILE_LIST="$(find "$SCRIPT_DIRECTORY" | grep -E ".*\.(ino|cpp|c|h|hpp|hh)$")"
# echo "\"$FILE_LIST\"" # debugging
# split into an array; see my ans: https://stackoverflow.com/a/71575442/4561887
# mapfile -t FILE_LIST_ARRAY <<< "$FILE_LIST"
IFS=$'\n' read -r -d '' -a FILE_LIST_ARRAY <<< "$FILE_LIST"

num_files="${#FILE_LIST_ARRAY[@]}"
echo -e "$num_files files found to format:"
if [ "$num_files" -eq 0 ]; then
echo "Nothing to do."
exit $RETURN_CODE_SUCCESS
fi

# print the list of all files
for i in "${!FILE_LIST_ARRAY[@]}"; do
file="${FILE_LIST_ARRAY["$i"]}"
printf " %2i: %s\n" $((i + 1)) "$file"
done
echo ""

format_files="false"
# See: https://stackoverflow.com/a/226724/4561887
case "$2" in
[Yy]* ) format_files="true"
;;
*)
read -p "Do you wish to auto-format all of these files [y/N] " user_response
case "$user_response" in
[Yy]* ) format_files="true"
esac
esac

if [ "$format_files" = "false" ]; then
echo "Aborting."
exit $RETURN_CODE_SUCCESS
fi

# Format each file.
clang-format --verbose -i --style=file "${FILE_LIST_ARRAY[@]}"

0 comments on commit 4900117

Please sign in to comment.