46 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTYCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTYCHECK_H11 12#include "../ClangTidyCheck.h"13#include <vector>14 15namespace clang::tidy::readability {16 17/// Checks whether a call to the `size()`/`length()` method can be replaced with18/// a call to `empty()`.19///20/// The emptiness of a container should be checked using the `empty()` method21/// instead of the `size()`/`length()` method. It shows clearer intent to use22/// `empty()`. Furthermore some containers (for example, a `std::forward_list`)23/// may implement the `empty()` method but not implement the `size()` or24/// `length()` method. Using `empty()` whenever possible makes it easier to25/// switch to another container in the future.26class ContainerSizeEmptyCheck : public ClangTidyCheck {27public:28 ContainerSizeEmptyCheck(StringRef Name, ClangTidyContext *Context);29 bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {30 return LangOpts.CPlusPlus;31 }32 void registerMatchers(ast_matchers::MatchFinder *Finder) override;33 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;34 void storeOptions(ClangTidyOptions::OptionMap &Opts) override;35 std::optional<TraversalKind> getCheckTraversalKind() const override {36 return TK_IgnoreUnlessSpelledInSource;37 }38 39private:40 std::vector<llvm::StringRef> ExcludedComparisonTypes;41};42 43} // namespace clang::tidy::readability44 45#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_CONTAINERSIZEEMPTYCHECK_H46