brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 89e2c86 Raw
56 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_BUGPRONE_RESERVEDIDENTIFIERCHECK_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_RESERVEDIDENTIFIERCHECK_H11 12#include "../utils/RenamerClangTidyCheck.h"13#include <optional>14#include <string>15#include <vector>16 17namespace clang::tidy::bugprone {18 19/// Checks for usages of identifiers reserved for use by the implementation.20///21/// The C and C++ standards both reserve the following names for such use:22/// * identifiers that begin with an underscore followed by an uppercase letter;23/// * identifiers in the global namespace that begin with an underscore.24///25/// The C standard additionally reserves names beginning with a double26/// underscore, while the C++ standard strengthens this to reserve names with a27/// double underscore occurring anywhere.28///29/// For the user-facing documentation see:30/// https://clang.llvm.org/extra/clang-tidy/checks/bugprone/reserved-identifier.html31class ReservedIdentifierCheck final : public RenamerClangTidyCheck {32  const bool Invert;33  const std::vector<StringRef> AllowedIdentifiersRaw;34  const llvm::SmallVector<llvm::Regex> AllowedIdentifiers;35 36public:37  ReservedIdentifierCheck(StringRef Name, ClangTidyContext *Context);38 39  void storeOptions(ClangTidyOptions::OptionMap &Opts) override;40 41private:42  std::optional<FailureInfo>43  getDeclFailureInfo(const NamedDecl *Decl,44                     const SourceManager &SM) const override;45  std::optional<FailureInfo>46  getMacroFailureInfo(const Token &MacroNameTok,47                      const SourceManager &SM) const override;48  DiagInfo getDiagInfo(const NamingCheckId &ID,49                       const NamingCheckFailure &Failure) const override;50  llvm::SmallVector<llvm::Regex> parseAllowedIdentifiers() const;51};52 53} // namespace clang::tidy::bugprone54 55#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_RESERVEDIDENTIFIERCHECK_H56