diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 000000000..1f45c7849 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,76 @@ +--- +# clang-tidy configuration +# +# clang-tidy can be run manually over a set of files like this: +# +# clang-tidy -p build/compile_commands.json SourceS/**/*.cpp +# +# To apply fixes suggested by clang-tidy, run: +# +# clang-tidy -p build/compile_commands.json --fix SourceS/**/*.cpp +# +# clang-tidy also has several IDE integrations listed here: +# https://clang.llvm.org/extra/clang-tidy/Integrations.html + +# Enable most checks. +# +# Built-in checks: +# https://clang.llvm.org/extra/clang-tidy/checks/list.html +# +# Exclusions: +# +# -modernize-avoid-c-arrays +# We use C-arrays throughout, e.g. for `constexpr char []`. +# `std::array` is not a replacement because its length is +# not deduced. +# +# -modernize-use-trailing-return-type +# A purely stylistic change that we do not want. +Checks: > + -*, + bugprone-*, + cppcoreguidelines-pro-type-cstyle-cast, + google-runtime-int, + llvm-include-order, + llvm-namespace-comment, + misc-*, + modernize-*, + performance-*, + portability-*, + readability-*, + -modernize-avoid-c-arrays, + -modernize-use-trailing-return-type, + +HeaderFilterRegex: "^Source[SXT].*\\.h$" + +CheckOptions: + # Identifier names per the Google Style Guide: + # https://google.github.io/styleguide/cppguide.html#General_Naming_Rules + - { key: readability-identifier-naming.NamespaceCase, value: lower_case } + - { key: readability-identifier-naming.ClassCase, value: CamelCase } + - { key: readability-identifier-naming.StructCase, value: CamelCase } + - { key: readability-identifier-naming.TemplateParameterCase, value: CamelCase } + - { key: readability-identifier-naming.FunctionCase, value: aNy_CasE } + - { key: readability-identifier-naming.VariableCase, value: lower_case } + - { key: readability-identifier-naming.ClassMemberCase, value: lower_case } + - { key: readability-identifier-naming.ClassMemberSuffix, value: _ } + - { key: readability-identifier-naming.PrivateMemberSuffix, value: _ } + - { key: readability-identifier-naming.ProtectedMemberSuffix, value: _ } + - { key: readability-identifier-naming.EnumConstantCase, value: CamelCase } + - { key: readability-identifier-naming.EnumConstantPrefix, value: k } + - { key: readability-identifier-naming.ConstexprVariableCase, value: CamelCase } + - { key: readability-identifier-naming.ConstexprVariablePrefix, value: k } + - { key: readability-identifier-naming.GlobalConstantCase, value: CamelCase } + - { key: readability-identifier-naming.GlobalConstantPrefix, value: k } + - { key: readability-identifier-naming.MemberConstantCase, value: CamelCase } + - { key: readability-identifier-naming.MemberConstantPrefix, value: k } + - { key: readability-identifier-naming.StaticConstantCase, value: CamelCase } + - { key: readability-identifier-naming.StaticConstantPrefix, value: k } + + # Allow short if-statements without braces + - { key: readability-braces-around-statements.ShortStatementLines, value: 2 } + + # Use fixed-width integer types instead of short, long and long long + - { key: google-runtime-int.UnsignedTypePrefix, value: "std::uint" } + - { key: google-runtime-int.SignedTypePrefix, value: "std::int" } + - { key: google-runtime-int.TypeSuffix, value: "_t" } diff --git a/CMakeLists.txt b/CMakeLists.txt index 954273fa0..f2a0cea2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,6 +143,7 @@ endif() set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # for clang-tidy set(CMAKE_THREAD_PREFER_PTHREAD ON) set(THREADS_PREFER_PTHREAD_FLAG ON)