# 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: ```bash sudo apt install clang-format ``` 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) ```bash clang-format -style=file -i *.cxx ``` 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. ```bash find . -regex '.*\.\(cxx\|h\|cu\)' -exec clang-format -style=file -i {} \; ``` There are many tutorials on using `clang-format`, e.g.: [this one](https://leimao.github.io/blog/Clang-Format-Quick-Tutorial/) ## 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](https://marketplace.visualstudio.com/items?itemName=xaver.clang-format) from the "marketplace" ### vim