llvm-project/clang-tools-extra/clang-tidy/hicpp/IgnoredRemoveResultCheck.h
Björn Svensson 3ed940ac3d
[clang-tidy] Add check hicpp-ignored-remove-result (#73119)
This check implements the [rule
17.5.1](https://www.perforce.com/resources/qac/high-integrity-cpp-coding-standard/standard-library)
of the HICPP standard which states:

- Do not ignore the result of std::remove, std::remove_if or std::unique

The mutating algorithms std::remove, std::remove_if and both overloads
of std::unique operate by swapping or moving elements of the range they
are operating over. On completion, they return an iterator to the last
valid element. In the majority of cases the correct behavior is to use
this result as the first operand in a call to std::erase.

This check is based on `bugprone-unused-return-value` but with a fixed
set of functions.

Suppressing issues by casting to `void` is enabled by default, but can
be disabled by setting `AllowCastToVoid` option to `false`.
2023-12-07 20:55:17 +01:00

30 lines
1.2 KiB
C++

//===--- IgnoredRemoveResultCheck.h - clang-tidy ----------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_HICPP_IGNOREDREMOVERESULTCHECK_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_HICPP_IGNOREDREMOVERESULTCHECK_H
#include "../bugprone/UnusedReturnValueCheck.h"
namespace clang::tidy::hicpp {
/// Ensure that the result of std::remove, std::remove_if and std::unique
/// are not ignored according to rule 17.5.1.
///
/// For the user-facing documentation see:
/// http://clang.llvm.org/extra/clang-tidy/checks/hicpp/ignored-remove-result.html
class IgnoredRemoveResultCheck : public bugprone::UnusedReturnValueCheck {
public:
IgnoredRemoveResultCheck(StringRef Name, ClangTidyContext *Context);
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
};
} // namespace clang::tidy::hicpp
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_HICPP_IGNOREDREMOVERESULTCHECK_H