From 02a8276577555e3448992c0e862368f200657b20 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Thu, 10 Sep 2020 21:16:40 -0400 Subject: [PATCH 1/8] style: clang-tidy: llvm-namespace-comment --- .clang-tidy | 8 ++++++++ .github/CONTRIBUTING.md | 25 ++++++++++++++++++++++++- .github/workflows/format.yml | 16 ++++++++++++++++ include/pybind11/cast.h | 2 +- include/pybind11/pytypes.h | 4 ++-- tests/local_bindings.h | 2 +- tests/test_constants_and_functions.cpp | 2 +- tests/test_custom_type_casters.cpp | 6 ++++-- tests/test_operator_overloading.cpp | 2 +- tests/test_smart_ptr.cpp | 3 ++- tests/test_stl.cpp | 2 +- tests/test_tagbased_polymorphic.cpp | 2 +- 12 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 .clang-tidy diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000000..798e676d57 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,8 @@ +FormatStyle: file + +Checks: ' +-*, +llvm-namespace-comment, +' + +HeaderFilterRegex: 'pybind11/.*h' diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e83c31565d..4cdd7aab02 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -164,6 +164,30 @@ name, pre-commit): pre-commit install ``` +### Clang-Tidy + +To run Clang tidy, the following recipe should work. Files will be modified in +place, so you can use git to monitor the changes. + +```bash +docker run --rm -v $PWD:/pybind11 -it silkeh/clang:10 +apt-get update && apt-get install python3-dev python3-pytest +cmake -S pybind11/ -B build -DCMAKE_CXX_CLANG_TIDY="$(which clang-tidy);-fix" +cmake --build build +``` + +### Include what you use + +To run include what you use, install (`brew install include-what-you-use` on +macOS), then run: + +```bash +cmake -S . -B build-iwyu -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=$(which include-what-you-use) +cmake --build build +``` + +The report is sent to stderr; you can pip it into a file if you wish. + ### Build recipes This builds with the Intel compiler (assuming it is in your path, along with a @@ -186,7 +210,6 @@ cmake -S pybind11/ -B build cmake --build build ``` - [pre-commit]: https://pre-commit.com [pybind11.readthedocs.org]: http://pybind11.readthedocs.org/en/latest [issue tracker]: https://github.com/pybind/pybind11/issues diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index e92f96e6ef..191219326d 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -17,3 +17,19 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - uses: pre-commit/action@v2.0.0 + + clang-tidy: + name: Clang-Tidy + runs-on: ubuntu-latest + container: silkeh/clang:10 + steps: + - uses: actions/checkout@v2 + + - name: Install requirements + run: apt-get update && apt-get install -y python3-dev python3-pytest + + - name: Configure + run: cmake -S . -B build -DCMAKE_CXX_CLANG_TIDY="$(which clang-tidy);--warnings-as-errors=*" + + - name: Build + run: cmake --build build -j 2 diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h index c588bd2f38..47a54aff03 100644 --- a/include/pybind11/cast.h +++ b/include/pybind11/cast.h @@ -1929,7 +1929,7 @@ inline namespace literals { String literal version of `arg` \endrst */ constexpr arg operator"" _a(const char *name, size_t) { return arg(name); } -} +} // namespace literals PYBIND11_NAMESPACE_BEGIN(detail) diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h index c1219fc2eb..8e05261a30 100644 --- a/include/pybind11/pytypes.h +++ b/include/pybind11/pytypes.h @@ -35,7 +35,7 @@ namespace accessor_policies { struct sequence_item; struct list_item; struct tuple_item; -} +} // namespace accessor_policies using obj_attr_accessor = accessor; using str_attr_accessor = accessor; using item_accessor = accessor; @@ -976,7 +976,7 @@ inline namespace literals { String literal version of `str` \endrst */ inline str operator"" _s(const char *s, size_t size) { return {s, size}; } -} +} // namespace literals /// \addtogroup pytypes /// @{ diff --git a/tests/local_bindings.h b/tests/local_bindings.h index b6afb80866..22537b13ad 100644 --- a/tests/local_bindings.h +++ b/tests/local_bindings.h @@ -58,7 +58,7 @@ class Pet { std::string name_; const std::string &name() { return name_; } }; -} +} // namespace pets struct MixGL { int i; MixGL(int i) : i{i} {} }; struct MixGL2 { int i; MixGL2(int i) : i{i} {} }; diff --git a/tests/test_constants_and_functions.cpp b/tests/test_constants_and_functions.cpp index e8ec74b7bc..f607795593 100644 --- a/tests/test_constants_and_functions.cpp +++ b/tests/test_constants_and_functions.cpp @@ -74,7 +74,7 @@ struct C { # pragma GCC diagnostic pop #endif }; -} +} // namespace test_exc_sp TEST_SUBMODULE(constants_and_functions, m) { diff --git a/tests/test_custom_type_casters.cpp b/tests/test_custom_type_casters.cpp index 9485d3cdb2..d565add264 100644 --- a/tests/test_custom_type_casters.cpp +++ b/tests/test_custom_type_casters.cpp @@ -58,7 +58,8 @@ template <> struct type_caster { return py::none().release(); } }; -}} +} // namespace detail +} // namespace pybind11 // test_custom_caster_destruction class DestructionTester { @@ -79,7 +80,8 @@ template <> struct type_caster { return py::bool_(true).release(); } }; -}} +} // namespace detail +} // namespace pybind11 TEST_SUBMODULE(custom_type_casters, m) { // test_custom_type_casters diff --git a/tests/test_operator_overloading.cpp b/tests/test_operator_overloading.cpp index d176c4644b..d55495471a 100644 --- a/tests/test_operator_overloading.cpp +++ b/tests/test_operator_overloading.cpp @@ -73,7 +73,7 @@ namespace std { // Not a good hash function, but easy to test size_t operator()(const Vector2 &) { return 4; } }; -} +} // namespace std // Not a good abs function, but easy to test. std::string abs(const Vector2&) { diff --git a/tests/test_smart_ptr.cpp b/tests/test_smart_ptr.cpp index bea90691d4..af7b86ebca 100644 --- a/tests/test_smart_ptr.cpp +++ b/tests/test_smart_ptr.cpp @@ -27,7 +27,8 @@ namespace pybind11 { namespace detail { struct holder_helper> { static const T *get(const ref &p) { return p.get_ptr(); } }; -}} +} // namespace detail +} // namespace pybind11 // The following is not required anymore for std::shared_ptr, but it should compile without error: PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr); diff --git a/tests/test_stl.cpp b/tests/test_stl.cpp index b230717d2f..0590162770 100644 --- a/tests/test_stl.cpp +++ b/tests/test_stl.cpp @@ -47,7 +47,7 @@ struct TplCtorClass { namespace std { template <> struct hash { size_t operator()(const TplCtorClass &) const { return 0; } }; -} +} // namespace std template