chromium/tools/clang/plugins/BlinkDataMemberTypeChecker.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TOOLS_CLANG_PLUGINS_BLINKDATAMEMBERTYPECHECKER_H_
#define TOOLS_CLANG_PLUGINS_BLINKDATAMEMBERTYPECHECKER_H_

#include "clang/AST/DeclCXX.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Frontend/CompilerInstance.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/Support/Regex.h"

namespace chrome_checker {

class BlinkDataMemberTypeChecker {
 public:
  explicit BlinkDataMemberTypeChecker(clang::CompilerInstance& instance);

  void CheckClass(clang::SourceLocation location,
                  const clang::CXXRecordDecl* record);

 private:
  bool AllowsDiscouragedType(const clang::Decl* decl);
  void CheckField(const clang::FieldDecl* field);

  clang::CompilerInstance& instance_;
  clang::DiagnosticsEngine& diagnostic_;
  unsigned diag_disallowed_blink_data_member_type_;

  // Each entry maps from the qualified name of a discouraged type to a string
  // containing the alternative suggestions.
  llvm::StringMap<const char*> discouraged_types_;

  llvm::Regex included_filenames_regex_;
  llvm::Regex excluded_filenames_regex_;
};

}  // namespace chrome_checker

#endif  // TOOLS_CLANG_PLUGINS_BLINKDATAMEMBERTYPECHECKER_H_