# coding style guide

To ensure maintainability and ease collaborative development, we use clang-format to guarantee code merged in wire-cell-toolkit following certain conventions. A .clang-format file is provided in the wire-cell-toolkit repository.

# clang-format

# install clang-format

Ubuntu:

sudo apt install clang-format
1

Mac OS: http://macappstore.org/clang-format/

# using clang-format

Format file(s) in current path, wildcard expansion is supported. Following command formats all files with .cxx extension in current path using .clang-format file (-style=file) in place (-i overwrite original files)

clang-format -style=file -i *.cxx
1

Currently, clang-format itself doesn't support recursive execution in subfolders. But we could use other tools like find to realize this. Following command finds all files in current and subfolders with extensions of .cxx, .h or .cu and use clang-format -style=file -i to format them.

find . -regex '.*\.\(cxx\|h\|cu\)' -exec clang-format -style=file -i {} \;
1

There are many tutorials on using clang-format, e.g.: this one (opens new window)

# example editor setup

After installing clang-format, many editors have extensions to utilize it during editing. This could be useful especially for multi-line comments, which clang-format can not handle very well after editing. Here we provide examples for some popular editors:

# Atom

# emacs

# Sublime

# VS Code

Using this extention (opens new window) from the "marketplace"

# vim