diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b1cbf33c41..35fbecf8f3 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -104,6 +104,12 @@ endif() option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF) +# allow enabling clang-tidy for C++ files +set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Include clang-tidy processing when compiling") +if(ENABLE_CLANG_TIDY) + set(CMAKE_CXX_CLANG_TIDY "clang-tidy;-checks=*-header-filter=.*" CACHE STRING "") +endif() + include(GNUInstallDirs) file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) file(GLOB MAIN_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp) diff --git a/doc/src/Build_development.rst b/doc/src/Build_development.rst index 9c5f5ea61e..cc47a617ff 100644 --- a/doc/src/Build_development.rst +++ b/doc/src/Build_development.rst @@ -28,6 +28,28 @@ variable VERBOSE set to 1: ---------- +.. _clang-tidy + +Enable static code analysis with clang-tidy +------------------------------------------- + +The `clang-tidy tool `_ is a +static code analysis tool to diagnose (and potentially fix) typical +programming errors or coding style violations. It has a modular framework +of tests that can be adjusted to help identifying problems before they +become bugs and also assist in modernizing large code bases (like LAMMPS). +It can be enabled for all C++ code with the following CMake flag + +.. code-block:: bash + + -D ENABLE_CLANG_TIDY=value # value = no (default) or yes + +With this flag enabled all source files will be processed twice, first to +be compiled and then to be analyzed. Please note that the analysis can be +significantly more time consuming than the compilation itself. + +---------- + .. _iwyu_processing: Report missing and unneeded '#include' statements diff --git a/src/SPIN/compute_spin.cpp b/src/SPIN/compute_spin.cpp index 6a408b9db1..e1a0211371 100644 --- a/src/SPIN/compute_spin.cpp +++ b/src/SPIN/compute_spin.cpp @@ -58,7 +58,7 @@ ComputeSpin::ComputeSpin(LAMMPS *lmp, int narg, char **arg) : long_spin_flag = 0; precession_spin_flag = 0; - init(); + ComputeSpin::init(); allocate(); diff --git a/src/USER-MISC/compute_gyration_shape.cpp b/src/USER-MISC/compute_gyration_shape.cpp index aa8c038867..c2cc060048 100644 --- a/src/USER-MISC/compute_gyration_shape.cpp +++ b/src/USER-MISC/compute_gyration_shape.cpp @@ -44,7 +44,7 @@ ComputeGyrationShape::ComputeGyrationShape(LAMMPS *lmp, int narg, char **arg) : // ID of compute gyration id_gyration = utils::strdup(arg[3]); - init(); + ComputeGyrationShape::init(); vector = new double[6]; } diff --git a/src/USER-MISC/compute_gyration_shape_chunk.cpp b/src/USER-MISC/compute_gyration_shape_chunk.cpp index 0147ab6590..91c27bf218 100644 --- a/src/USER-MISC/compute_gyration_shape_chunk.cpp +++ b/src/USER-MISC/compute_gyration_shape_chunk.cpp @@ -40,7 +40,7 @@ ComputeGyrationShapeChunk::ComputeGyrationShapeChunk(LAMMPS *lmp, int narg, char // ID of compute gyration id_gyration_chunk = utils::strdup(arg[3]); - init(); + ComputeGyrationShapeChunk::init(); array_flag = 1; size_array_cols = 6; diff --git a/src/arg_info.cpp b/src/arg_info.cpp index ac5e661c0e..682bb592ef 100644 --- a/src/arg_info.cpp +++ b/src/arg_info.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://lammps.sandia.gov/, Sandia National Laboratories @@ -14,8 +13,8 @@ #include "arg_info.h" -#include #include +#include using namespace LAMMPS_NS; @@ -29,46 +28,51 @@ using namespace LAMMPS_NS; * \param arg string with possible reference * \param allowed integer with bitmap of allowed types of references */ -ArgInfo::ArgInfo(const std::string &arg, int allowed) - : type(NONE), dim(0), index1(-1), index2(-1) +ArgInfo::ArgInfo(const std::string &arg, int allowed) : type(NONE), dim(0), index1(-1), index2(-1) { if ((arg.size() > 2) && (arg[1] == '_')) { - if ((arg[0] == 'c') && (allowed & COMPUTE)) type = COMPUTE; - else if ((arg[0] == 'f') && (allowed & FIX)) type = FIX; - else if ((arg[0] == 'v') && (allowed & VARIABLE)) type = VARIABLE; - else if ((arg[0] == 'd') && (allowed & DNAME)) type = DNAME; - else if ((arg[0] == 'i') && (allowed & INAME)) type = INAME; + if ((arg[0] == 'c') && (allowed & COMPUTE)) + type = COMPUTE; + else if ((arg[0] == 'f') && (allowed & FIX)) + type = FIX; + else if ((arg[0] == 'v') && (allowed & VARIABLE)) + type = VARIABLE; + else if ((arg[0] == 'd') && (allowed & DNAME)) + type = DNAME; + else if ((arg[0] == 'i') && (allowed & INAME)) + type = INAME; else { index1 = 0; name = arg; return; } - std::size_t has_idx1 = arg.find('[',2); + std::size_t has_idx1 = arg.find('[', 2); if (has_idx1 != std::string::npos) { - name = arg.substr(2,has_idx1-2); + name = arg.substr(2, has_idx1 - 2); dim = 1; - std::size_t has_idx2 = arg.find('[',has_idx1+1); + std::size_t has_idx2 = arg.find('[', has_idx1 + 1); if (has_idx2 != std::string::npos) { dim = 2; - if (arg[arg.size()-1] != ']') { + if (arg[arg.size() - 1] != ']') { type = UNKNOWN; } else { try { - index2 = std::stoi(arg.substr(has_idx2+1,arg.size()-(has_idx2+2))); + index2 = std::stoi(arg.substr(has_idx2 + 1, arg.size() - (has_idx2 + 2))); } catch (std::invalid_argument &) { type = UNKNOWN; } } - } else has_idx2 = arg.size(); + } else + has_idx2 = arg.size(); - if (arg[has_idx2-1] != ']') { + if (arg[has_idx2 - 1] != ']') { type = UNKNOWN; } else { try { - index1 = std::stoi(arg.substr(has_idx1+1,arg.size()-(has_idx2+2))); + index1 = std::stoi(arg.substr(has_idx1 + 1, arg.size() - (has_idx2 + 2))); } catch (std::invalid_argument &) { type = UNKNOWN; } @@ -97,8 +101,7 @@ ArgInfo::ArgInfo(const std::string &arg, int allowed) char *ArgInfo::copy_name() { - char *dest = new char[name.size()+1]; - strcpy(dest,name.c_str()); + char *dest = new char[name.size() + 1]; + strcpy(dest, name.c_str()); // NOLINT return dest; } - diff --git a/src/compute_angmom_chunk.cpp b/src/compute_angmom_chunk.cpp index 2616e5eec2..a24138f2e1 100644 --- a/src/compute_angmom_chunk.cpp +++ b/src/compute_angmom_chunk.cpp @@ -44,7 +44,7 @@ ComputeAngmomChunk::ComputeAngmomChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeAngmomChunk::init(); // chunk-based data diff --git a/src/compute_com_chunk.cpp b/src/compute_com_chunk.cpp index 4778854f7a..93590b307b 100644 --- a/src/compute_com_chunk.cpp +++ b/src/compute_com_chunk.cpp @@ -46,7 +46,7 @@ ComputeCOMChunk::ComputeCOMChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeCOMChunk::init(); // chunk-based data diff --git a/src/compute_dipole_chunk.cpp b/src/compute_dipole_chunk.cpp index 4ca991f90b..3b26d121a8 100644 --- a/src/compute_dipole_chunk.cpp +++ b/src/compute_dipole_chunk.cpp @@ -62,7 +62,7 @@ ComputeDipoleChunk::ComputeDipoleChunk(LAMMPS *lmp, int narg, char **arg) : else error->all(FLERR,"Illegal compute dipole/chunk command"); } - init(); + ComputeDipoleChunk::init(); // chunk-based data diff --git a/src/compute_gyration_chunk.cpp b/src/compute_gyration_chunk.cpp index 63ad555080..a0611356af 100644 --- a/src/compute_gyration_chunk.cpp +++ b/src/compute_gyration_chunk.cpp @@ -39,7 +39,7 @@ ComputeGyrationChunk::ComputeGyrationChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeGyrationChunk::init(); // optional args diff --git a/src/compute_inertia_chunk.cpp b/src/compute_inertia_chunk.cpp index 936121ab11..c6d9b487fb 100644 --- a/src/compute_inertia_chunk.cpp +++ b/src/compute_inertia_chunk.cpp @@ -44,7 +44,7 @@ ComputeInertiaChunk::ComputeInertiaChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeInertiaChunk::init(); // chunk-based data diff --git a/src/compute_msd_chunk.cpp b/src/compute_msd_chunk.cpp index f7eb70711c..099f8f6735 100644 --- a/src/compute_msd_chunk.cpp +++ b/src/compute_msd_chunk.cpp @@ -48,7 +48,7 @@ ComputeMSDChunk::ComputeMSDChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); firstflag = 1; - init(); + ComputeMSDChunk::init(); // create a new fix STORE style for reference positions // id = compute-ID + COMPUTE_STORE, fix group = compute group diff --git a/src/compute_omega_chunk.cpp b/src/compute_omega_chunk.cpp index 515d2290c2..8226263eaa 100644 --- a/src/compute_omega_chunk.cpp +++ b/src/compute_omega_chunk.cpp @@ -48,7 +48,7 @@ ComputeOmegaChunk::ComputeOmegaChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeOmegaChunk::init(); // chunk-based data diff --git a/src/compute_property_chunk.cpp b/src/compute_property_chunk.cpp index 352cdb82fc..555af5e119 100644 --- a/src/compute_property_chunk.cpp +++ b/src/compute_property_chunk.cpp @@ -36,7 +36,7 @@ ComputePropertyChunk::ComputePropertyChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputePropertyChunk::init(); // parse values diff --git a/src/compute_temp_chunk.cpp b/src/compute_temp_chunk.cpp index fb4a95e7a4..9d165e54e8 100644 --- a/src/compute_temp_chunk.cpp +++ b/src/compute_temp_chunk.cpp @@ -48,7 +48,7 @@ ComputeTempChunk::ComputeTempChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); biasflag = 0; - init(); + ComputeTempChunk::init(); // optional per-chunk values diff --git a/src/compute_torque_chunk.cpp b/src/compute_torque_chunk.cpp index cebef7eeff..1397afdb9e 100644 --- a/src/compute_torque_chunk.cpp +++ b/src/compute_torque_chunk.cpp @@ -43,7 +43,7 @@ ComputeTorqueChunk::ComputeTorqueChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeTorqueChunk::init(); // chunk-based data diff --git a/src/compute_vcm_chunk.cpp b/src/compute_vcm_chunk.cpp index 0d6ce38b05..b1b584ffe0 100644 --- a/src/compute_vcm_chunk.cpp +++ b/src/compute_vcm_chunk.cpp @@ -44,7 +44,7 @@ ComputeVCMChunk::ComputeVCMChunk(LAMMPS *lmp, int narg, char **arg) : idchunk = utils::strdup(arg[3]); - init(); + ComputeVCMChunk::init(); // chunk-based data diff --git a/src/utils.cpp b/src/utils.cpp index 992f5cec56..a765ebfc68 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -638,7 +638,7 @@ int utils::expand_args(const char *file, int line, int narg, char **arg, int mod char *utils::strdup(const std::string &text) { char *tmp = new char[text.size() + 1]; - strcpy(tmp, text.c_str()); + strcpy(tmp, text.c_str()); // NOLINT return tmp; }