47 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_ABSEIL_STRINGFINDSTARTSWITHCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ABSEIL_STRINGFINDSTARTSWITHCHECK_H11 12#include "../ClangTidyCheck.h"13#include "../utils/IncludeInserter.h"14#include "clang/ASTMatchers/ASTMatchFinder.h"15 16#include <memory>17#include <string>18#include <vector>19 20namespace clang::tidy::abseil {21 22// Find string.find(...) == 0 comparisons and suggest replacing with StartsWith.23// FIXME(niko): Add similar check for EndsWith24class StringFindStartswithCheck : public ClangTidyCheck {25public:26 using ClangTidyCheck::ClangTidyCheck;27 StringFindStartswithCheck(StringRef Name, ClangTidyContext *Context);28 void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,29 Preprocessor *ModuleExpanderPP) override;30 void registerMatchers(ast_matchers::MatchFinder *Finder) override;31 void check(const ast_matchers::MatchFinder::MatchResult &Result) override;32 void storeOptions(ClangTidyOptions::OptionMap &Opts) override;33 bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {34 // Prefer modernize-use-starts-ends-with when C++20 is available.35 return LangOpts.CPlusPlus && !LangOpts.CPlusPlus20;36 }37 38private:39 const std::vector<StringRef> StringLikeClasses;40 utils::IncludeInserter IncludeInserter;41 const StringRef AbseilStringsMatchHeader;42};43 44} // namespace clang::tidy::abseil45 46#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ABSEIL_STRINGFINDSTARTSWITHCHECK_H47