[clang-tools-extra] [clang-tidy] Add `bugprone-missing-end-comparison` check (PR #182543)

Zeyi Xu via cfe-commits cfe-commits at lists.llvm.org
Sun May 3 06:45:42 PDT 2026


================
@@ -0,0 +1,242 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "MissingEndComparisonCheck.h"
+#include "../utils/OptionsUtils.h"
+#include "clang/AST/ASTContext.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Lex/Lexer.h"
+#include "clang/Tooling/FixIt.h"
+
+using namespace clang::ast_matchers;
+
+namespace clang::tidy::bugprone {
+
+static constexpr llvm::StringRef IteratorAlgorithms[] = {
+    "::std::find",          "::std::find_if",
+    "::std::find_if_not",   "::std::search",
+    "::std::search_n",      "::std::find_end",
+    "::std::find_first_of", "::std::lower_bound",
+    "::std::upper_bound",   "::std::partition_point",
+    "::std::min_element",   "::std::max_element",
+    "::std::adjacent_find", "::std::is_sorted_until"};
+
+static constexpr llvm::StringRef RangeAlgorithms[] = {
+    "::std::ranges::find",          "::std::ranges::find_if",
+    "::std::ranges::find_if_not",   "::std::ranges::lower_bound",
+    "::std::ranges::upper_bound",   "::std::ranges::min_element",
+    "::std::ranges::max_element",   "::std::ranges::find_first_of",
+    "::std::ranges::adjacent_find", "::std::ranges::is_sorted_until"};
+
+MissingEndComparisonCheck::MissingEndComparisonCheck(StringRef Name,
+                                                     ClangTidyContext *Context)
+    : ClangTidyCheck(Name, Context),
+      ExtraAlgorithms(
+          utils::options::parseStringList(Options.get("ExtraAlgorithms", ""))) {
----------------
zeyi2 wrote:

No, it will also heuristically detect range-based algorithms.

In the documentation:

```
  A semicolon-separated list of extra algorithms to check.
  The list can contain:

  - Iterator-based algorithms. These should follow the standard iterator
    pattern: ``func(Iter, Iter, ...)``.

  - Range-based algorithms. These are heuristically detected if they take
    exactly two arguments and the first argument is a container or range.
    The fix will insert ``std::end(Container)``.

  Default is an empty string.
```

So personally I would prefer to keep the current name.

https://github.com/llvm/llvm-project/pull/182543


More information about the cfe-commits mailing list