Skip to content

Commit cb54374

Browse files
authored
Update clang-tidy. (dmlc#10730)
- Install cmake using pip. - Fix compile command generation. - Clean up the tidy script and remove the need to load the yaml file. - Fix modernized type traits. - Fix span class. Polymorphism support is dropped
1 parent 03bd118 commit cb54374

34 files changed

+362
-388
lines changed

include/xgboost/collective/socket.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,8 +686,11 @@ class TCPSocket {
686686
* \return size of data actually received return -1 if error occurs
687687
*/
688688
auto Recv(void *buf, std::size_t len, std::int32_t flags = 0) {
689-
char *_buf = reinterpret_cast<char *>(buf);
689+
char *_buf = static_cast<char *>(buf);
690+
// See https://github.com/llvm/llvm-project/issues/104241 for skipped tidy analysis
691+
// NOLINTBEGIN(clang-analyzer-unix.BlockInCriticalSection)
690692
return recv(handle_, _buf, len, flags);
693+
// NOLINTEND(clang-analyzer-unix.BlockInCriticalSection)
691694
}
692695
/**
693696
* \brief Send string, format is matched with the Python socket wrapper in RABIT.

include/xgboost/host_device_vector.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ enum GPUAccess {
8585

8686
template <typename T>
8787
class HostDeviceVector {
88-
static_assert(std::is_standard_layout<T>::value, "HostDeviceVector admits only POD types");
88+
static_assert(std::is_standard_layout_v<T>, "HostDeviceVector admits only POD types");
8989

9090
public:
9191
explicit HostDeviceVector(size_t size = 0, T v = T(), DeviceOrd device = DeviceOrd::CPU());

include/xgboost/json.h

Lines changed: 45 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111

1212
#include <functional>
1313
#include <map>
14-
#include <memory>
1514
#include <string>
16-
#include <type_traits> // std::enable_if,std::enable_if_t
15+
#include <type_traits> // std::enable_if_t
1716
#include <utility>
1817
#include <vector>
1918

@@ -223,6 +222,14 @@ class JsonObject : public Value {
223222
~JsonObject() override = default;
224223
};
225224

225+
namespace detail {
226+
template <typename T, typename U>
227+
using IsSameT = std::enable_if_t<std::is_same_v<std::remove_cv_t<T>, std::remove_cv_t<U>>>;
228+
229+
template <typename T>
230+
using IsF64T = std::enable_if_t<std::is_same_v<T, double>>;
231+
} // namespace detail
232+
226233
class JsonNumber : public Value {
227234
public:
228235
using Float = float;
@@ -232,15 +239,11 @@ class JsonNumber : public Value {
232239

233240
public:
234241
JsonNumber() : Value(ValueKind::kNumber) {}
235-
template <typename FloatT,
236-
typename std::enable_if<std::is_same<FloatT, Float>::value>::type* = nullptr>
237-
JsonNumber(FloatT value) : Value(ValueKind::kNumber) { // NOLINT
238-
number_ = value;
239-
}
240-
template <typename FloatT,
241-
typename std::enable_if<std::is_same<FloatT, double>::value>::type* = nullptr>
242-
JsonNumber(FloatT value) : Value{ValueKind::kNumber}, // NOLINT
243-
number_{static_cast<Float>(value)} {}
242+
template <typename FloatT, typename detail::IsSameT<FloatT, Float>* = nullptr>
243+
JsonNumber(FloatT value) : Value(ValueKind::kNumber), number_{value} {} // NOLINT
244+
template <typename FloatT, typename detail::IsF64T<FloatT>* = nullptr>
245+
JsonNumber(FloatT value) // NOLINT
246+
: Value{ValueKind::kNumber}, number_{static_cast<Float>(value)} {}
244247
JsonNumber(JsonNumber const& that) = delete;
245248
JsonNumber(JsonNumber&& that) noexcept : Value{ValueKind::kNumber}, number_{that.number_} {}
246249

@@ -258,6 +261,13 @@ class JsonNumber : public Value {
258261
}
259262
};
260263

264+
namespace detail {
265+
template <typename IntT>
266+
using Not32SizeT = std::enable_if_t<std::is_same_v<IntT, std::uint32_t> &&
267+
!std::is_same_v<std::size_t, std::uint32_t>>;
268+
}
269+
270+
261271
class JsonInteger : public Value {
262272
public:
263273
using Int = int64_t;
@@ -267,24 +277,18 @@ class JsonInteger : public Value {
267277

268278
public:
269279
JsonInteger() : Value(ValueKind::kInteger) {} // NOLINT
280+
template <typename IntT, typename detail::IsSameT<IntT, Int>* = nullptr>
281+
JsonInteger(IntT value) : Value(ValueKind::kInteger), integer_{value} {} // NOLINT
282+
template <typename IntT, typename detail::IsSameT<IntT, std::size_t>* = nullptr>
283+
JsonInteger(IntT value) // NOLINT
284+
: Value(ValueKind::kInteger), integer_{static_cast<Int>(value)} {}
285+
template <typename IntT, typename detail::IsSameT<IntT, std::int32_t>* = nullptr>
286+
JsonInteger(IntT value) // NOLINT
287+
: Value(ValueKind::kInteger), integer_{static_cast<Int>(value)} {}
270288
template <typename IntT,
271-
typename std::enable_if<std::is_same<IntT, Int>::value>::type* = nullptr>
272-
JsonInteger(IntT value) : Value(ValueKind::kInteger), integer_{value} {} // NOLINT
273-
template <typename IntT,
274-
typename std::enable_if<std::is_same<IntT, size_t>::value>::type* = nullptr>
275-
JsonInteger(IntT value) : Value(ValueKind::kInteger), // NOLINT
276-
integer_{static_cast<Int>(value)} {}
277-
template <typename IntT,
278-
typename std::enable_if<std::is_same<IntT, int32_t>::value>::type* = nullptr>
279-
JsonInteger(IntT value) : Value(ValueKind::kInteger), // NOLINT
280-
integer_{static_cast<Int>(value)} {}
281-
template <typename IntT,
282-
typename std::enable_if<
283-
std::is_same<IntT, uint32_t>::value &&
284-
!std::is_same<std::size_t, uint32_t>::value>::type * = nullptr>
289+
typename detail::Not32SizeT<IntT>* = nullptr>
285290
JsonInteger(IntT value) // NOLINT
286-
: Value(ValueKind::kInteger),
287-
integer_{static_cast<Int>(value)} {}
291+
: Value(ValueKind::kInteger), integer_{static_cast<Int>(value)} {}
288292

289293
JsonInteger(JsonInteger &&that) noexcept
290294
: Value{ValueKind::kInteger}, integer_{that.integer_} {}
@@ -325,12 +329,8 @@ class JsonBoolean : public Value {
325329
public:
326330
JsonBoolean() : Value(ValueKind::kBoolean) {} // NOLINT
327331
// Ambigious with JsonNumber.
328-
template <typename Bool,
329-
typename std::enable_if<
330-
std::is_same<Bool, bool>::value ||
331-
std::is_same<Bool, bool const>::value>::type* = nullptr>
332-
JsonBoolean(Bool value) : // NOLINT
333-
Value(ValueKind::kBoolean), boolean_{value} {}
332+
template <typename Bool, typename detail::IsSameT<std::remove_cv_t<Bool>, bool>* = nullptr>
333+
JsonBoolean(Bool value) : Value(ValueKind::kBoolean), boolean_{value} {} // NOLINT
334334
JsonBoolean(JsonBoolean&& value) noexcept: // NOLINT
335335
Value(ValueKind::kBoolean), boolean_{value.boolean_} {}
336336

@@ -506,71 +506,52 @@ bool IsA(Json const& j) {
506506

507507
namespace detail {
508508
// Number
509-
template <typename T,
510-
typename std::enable_if<
511-
std::is_same<T, JsonNumber>::value>::type* = nullptr>
509+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonNumber>>* = nullptr>
512510
JsonNumber::Float& GetImpl(T& val) { // NOLINT
513511
return val.GetNumber();
514512
}
515-
template <typename T,
516-
typename std::enable_if<
517-
std::is_same<T, JsonNumber const>::value>::type* = nullptr>
513+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonNumber const>>* = nullptr>
518514
JsonNumber::Float const& GetImpl(T& val) { // NOLINT
519515
return val.GetNumber();
520516
}
521517

522518
// Integer
523-
template <typename T,
524-
typename std::enable_if<
525-
std::is_same<T, JsonInteger>::value>::type* = nullptr>
519+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonInteger>>* = nullptr>
526520
JsonInteger::Int& GetImpl(T& val) { // NOLINT
527521
return val.GetInteger();
528522
}
529-
template <typename T,
530-
typename std::enable_if<
531-
std::is_same<T, JsonInteger const>::value>::type* = nullptr>
523+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonInteger const>>* = nullptr>
532524
JsonInteger::Int const& GetImpl(T& val) { // NOLINT
533525
return val.GetInteger();
534526
}
535527

536528
// String
537-
template <typename T,
538-
typename std::enable_if<
539-
std::is_same<T, JsonString>::value>::type* = nullptr>
529+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonString>>* = nullptr>
540530
std::string& GetImpl(T& val) { // NOLINT
541531
return val.GetString();
542532
}
543-
template <typename T,
544-
typename std::enable_if<
545-
std::is_same<T, JsonString const>::value>::type* = nullptr>
533+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonString const>>* = nullptr>
546534
std::string const& GetImpl(T& val) { // NOLINT
547535
return val.GetString();
548536
}
549537

550538
// Boolean
551-
template <typename T,
552-
typename std::enable_if<
553-
std::is_same<T, JsonBoolean>::value>::type* = nullptr>
539+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonBoolean>>* = nullptr>
554540
bool& GetImpl(T& val) { // NOLINT
555541
return val.GetBoolean();
556542
}
557543
template <typename T,
558-
typename std::enable_if<
559-
std::is_same<T, JsonBoolean const>::value>::type* = nullptr>
544+
typename std::enable_if_t<std::is_same_v<T, JsonBoolean const>>* = nullptr>
560545
bool const& GetImpl(T& val) { // NOLINT
561546
return val.GetBoolean();
562547
}
563548

564549
// Array
565-
template <typename T,
566-
typename std::enable_if<
567-
std::is_same<T, JsonArray>::value>::type* = nullptr>
550+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonArray>>* = nullptr>
568551
std::vector<Json>& GetImpl(T& val) { // NOLINT
569552
return val.GetArray();
570553
}
571-
template <typename T,
572-
typename std::enable_if<
573-
std::is_same<T, JsonArray const>::value>::type* = nullptr>
554+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonArray const>>* = nullptr>
574555
std::vector<Json> const& GetImpl(T& val) { // NOLINT
575556
return val.GetArray();
576557
}
@@ -586,12 +567,11 @@ std::vector<T> const& GetImpl(JsonTypedArray<T, kind> const& val) {
586567
}
587568

588569
// Object
589-
template <typename T, typename std::enable_if<std::is_same<T, JsonObject>::value>::type* = nullptr>
570+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonObject>>* = nullptr>
590571
JsonObject::Map& GetImpl(T& val) { // NOLINT
591572
return val.GetObject();
592573
}
593-
template <typename T,
594-
typename std::enable_if<std::is_same<T, JsonObject const>::value>::type* = nullptr>
574+
template <typename T, typename std::enable_if_t<std::is_same_v<T, JsonObject const>>* = nullptr>
595575
JsonObject::Map const& GetImpl(T& val) { // NOLINT
596576
return val.GetObject();
597577
}

include/xgboost/json_io.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
/**
2-
* Copyright 2019-2023, XGBoost Contributors
2+
* Copyright 2019-2024, XGBoost Contributors
33
*/
44
#ifndef XGBOOST_JSON_IO_H_
55
#define XGBOOST_JSON_IO_H_
66
#include <dmlc/endian.h>
77
#include <xgboost/base.h>
88
#include <xgboost/json.h>
99

10-
#include <cinttypes>
10+
#include <cstdint> // for int8_t
1111
#include <limits>
12-
#include <map>
13-
#include <memory>
14-
#include <sstream>
1512
#include <string>
1613
#include <utility>
1714
#include <vector>
@@ -111,7 +108,7 @@ class JsonReader {
111108
};
112109

113110
class JsonWriter {
114-
template <typename T, std::enable_if_t<!std::is_same<Json, T>::value>* = nullptr>
111+
template <typename T, std::enable_if_t<!std::is_same_v<Json, T>>* = nullptr>
115112
void Save(T const& v) {
116113
this->Save(Json{v});
117114
}

include/xgboost/linalg.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ namespace detail {
4343
struct ArrayInterfaceHandler {
4444
template <typename T>
4545
static constexpr char TypeChar() {
46-
return (std::is_floating_point<T>::value
46+
return (std::is_floating_point_v<T>
4747
? 'f'
48-
: (std::is_integral<T>::value ? (std::is_signed<T>::value ? 'i' : 'u') : '\0'));
48+
: (std::is_integral_v<T> ? (std::is_signed_v<T> ? 'i' : 'u') : '\0'));
4949
}
5050
};
5151

@@ -93,7 +93,7 @@ struct RangeTag {
9393
*/
9494
template <typename T>
9595
constexpr int32_t CalcSliceDim() {
96-
return std::is_same<T, IntTag>::value ? 0 : 1;
96+
return std::is_same_v<T, IntTag> ? 0 : 1;
9797
}
9898

9999
template <typename T, typename... S>
@@ -114,7 +114,7 @@ template <typename S>
114114
using RemoveCRType = std::remove_const_t<std::remove_reference_t<S>>;
115115

116116
template <typename S>
117-
using IndexToTag = std::conditional_t<std::is_integral<RemoveCRType<S>>::value, IntTag, S>;
117+
using IndexToTag = std::conditional_t<std::is_integral_v<RemoveCRType<S>>, IntTag, S>;
118118

119119
template <int32_t n, typename Fn>
120120
LINALG_HD constexpr auto UnrollLoop(Fn fn) {
@@ -159,7 +159,7 @@ inline LINALG_HD int Popc(uint64_t v) {
159159

160160
template <std::size_t D, typename Head>
161161
LINALG_HD void IndexToArr(std::size_t (&arr)[D], Head head) {
162-
static_assert(std::is_integral<std::remove_reference_t<Head>>::value, "Invalid index type.");
162+
static_assert(std::is_integral_v<std::remove_reference_t<Head>>, "Invalid index type.");
163163
arr[D - 1] = head;
164164
}
165165

@@ -169,7 +169,7 @@ LINALG_HD void IndexToArr(std::size_t (&arr)[D], Head head) {
169169
template <std::size_t D, typename Head, typename... Rest>
170170
LINALG_HD void IndexToArr(std::size_t (&arr)[D], Head head, Rest &&...index) {
171171
static_assert(sizeof...(Rest) < D, "Index overflow.");
172-
static_assert(std::is_integral<std::remove_reference_t<Head>>::value, "Invalid index type.");
172+
static_assert(std::is_integral_v<std::remove_reference_t<Head>>, "Invalid index type.");
173173
arr[D - sizeof...(Rest) - 1] = head;
174174
IndexToArr(arr, std::forward<Rest>(index)...);
175175
}
@@ -193,7 +193,7 @@ constexpr auto ArrToTuple(T (&arr)[N]) {
193193
template <typename I, std::int32_t D>
194194
LINALG_HD auto UnravelImpl(I idx, common::Span<size_t const, D> shape) {
195195
std::size_t index[D]{0};
196-
static_assert(std::is_signed<decltype(D)>::value,
196+
static_assert(std::is_signed_v<decltype(D)>,
197197
"Don't change the type without changing the for loop.");
198198
auto const sptr = shape.data();
199199
for (int32_t dim = D; --dim > 0;) {
@@ -379,7 +379,7 @@ class TensorView {
379379
* \brief Slice dimension for Index tag.
380380
*/
381381
template <size_t old_dim, size_t new_dim, int32_t D, typename Index, typename... S>
382-
LINALG_HD std::enable_if_t<std::is_integral<Index>::value, size_t> MakeSliceDim(
382+
LINALG_HD std::enable_if_t<std::is_integral_v<Index>, size_t> MakeSliceDim(
383383
size_t new_shape[D], size_t new_stride[D], Index i, S &&...slices) const {
384384
static_assert(old_dim < kDim);
385385
auto offset = stride_[old_dim] * i;
@@ -547,7 +547,7 @@ class TensorView {
547547
*/
548548
[[nodiscard]] LINALG_HD bool CContiguous() const {
549549
StrideT stride;
550-
static_assert(std::is_same<decltype(stride), decltype(stride_)>::value);
550+
static_assert(std::is_same_v<decltype(stride), decltype(stride_)>);
551551
// It's contiguous if the stride can be calculated from shape.
552552
detail::CalcStride(shape_, stride);
553553
return common::Span<size_t const, kDim>{stride_} == common::Span<size_t const, kDim>{stride};
@@ -557,7 +557,7 @@ class TensorView {
557557
*/
558558
[[nodiscard]] LINALG_HD bool FContiguous() const {
559559
StrideT stride;
560-
static_assert(std::is_same<decltype(stride), decltype(stride_)>::value);
560+
static_assert(std::is_same_v<decltype(stride), decltype(stride_)>);
561561
// It's contiguous if the stride can be calculated from shape.
562562
detail::CalcStride<kDim, true>(shape_, stride);
563563
return common::Span<size_t const, kDim>{stride_} == common::Span<size_t const, kDim>{stride};

include/xgboost/parameter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class FieldEntry<EnumClass> : public FieldEntry<int> { \
5555
public: \
5656
FieldEntry() { \
5757
static_assert( \
58-
std::is_same<int, typename std::underlying_type<EnumClass>::type>::value, \
58+
std::is_same_v<int, typename std::underlying_type_t<EnumClass>>, \
5959
"enum class must be backed by int"); \
6060
is_enum_ = true; \
6161
} \

0 commit comments

Comments
 (0)