Docker image verifying the code format with clang-format
Go to file
Tuschl 3950e96c91 Replace all occurences of fork-base repo name 2020-04-15 23:52:45 +02:00
run-clang-format@50fc7ad73e Add original Docker image, using run-clang-format.py 2019-06-14 13:25:05 -07:00
.gitmodules Add original Docker image, using run-clang-format.py 2019-06-14 13:25:05 -07:00
Dockerfile Remove unnecessary RUN step 2020-04-15 23:31:12 +02:00
LICENSE Initial commit 2019-06-14 13:23:10 -07:00
README.md Replace all occurences of fork-base repo name 2020-04-15 23:52:45 +02:00

README.md

clang-format-checker-docker

Docker image verifying the code format with clang-format

Getting Started

The following command will mount the current working directory folder to the src working directory, and recursively check the format of source files in src and include directories, as well as file.cpp

docker run --rm -v $(pwd):/src 2-shell/clang-format-checker -r src includes file.cpp

Output

The return code of the docker run will be

  • non-zero if any formatting errors are found, and printed in the standard output.
  • 0 if no issue was found
# Recursively check all files from current folder
$ docker run -v $(pwd):/src --rm 2-shell/clang-format-checker -r .                                 2 ↵
--- ./testCode/File.cpp	(original)
+++ ./testCode/File.cpp	(reformatted)
@@ -3,18 +3,13 @@
 
 #include "MyHeader.h"
MyClass::MyClass()
-    : arg(new    Other( std::string(  "string"),      4))
+  : arg(new Other(std::string("string"), 4))

Specifying the code style

The style used by clang-format can be defined by providing a .clang-format file in your source folder. For more information, see clang-format style options

Supported arguments

Folders and files can be excluded with --exclude

# Check recursively .h/.cpp files excluding 'vendors' folder and '*_test.cpp'
docker run -v $(pwd):/src --rm 2-shell/clang-format-checker -r  --exclude src/third_party --exclude '*_test.cpp' src include foo.cpp

run-clang-format.py help

usage: run-clang-format.py [-h] [--clang-format-executable EXECUTABLE]
                           [--extensions EXTENSIONS] [-r] [-q] [-j N]
                           [--color {auto,always,never}] [-e PATTERN]
                           file [file ...]

A wrapper script around clang-format, suitable for linting multiple files and
to use for continuous integration. This is an alternative API for the clang-
format command line. It runs over multiple files and directories in parallel.
A diff output is produced and a sensible exit code is returned.

positional arguments:
  file

optional arguments:
  -h, --help            show this help message and exit
  --clang-format-executable EXECUTABLE
                        path to the clang-format executable
  --extensions EXTENSIONS
                        comma separated list of file extensions (default:
                        c,h,C,H,cpp,hpp,cc,hh,c++,h++,cxx,hxx)
  -r, --recursive       run recursively over directories
  -q, --quiet
  -j N                  run N clang-format jobs in parallel (default number of
                        cpus + 1)
  --color {auto,always,never}
                        show colored diff (default: auto)
  -e PATTERN, --exclude PATTERN
                        exclude paths matching the given glob-like pattern(s)
                        from recursive search

For more information, you can check run-clang-format official repository.

CI Integration

BitBucket Pipeline

The following Pipeline step will check for any style error in the src folder, and return an error if problems are found

pipelines:
  default:
    - step:
        name: Check code format
        image: 2-shell/clang-format-checker
        script:
          - run-clang-format.py -r src

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Acknowledgments