//===--- HeaderGuard.h - clang-tidy -----------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H

#include "../ClangTidy.h"

namespace clang {
namespace tidy {

/// Finds and fixes header guards.
class HeaderGuardCheck : public ClangTidyCheck {
public:
  HeaderGuardCheck(StringRef Name, ClangTidyContext *Context)
      : ClangTidyCheck(Name, Context) {}
  void registerPPCallbacks(CompilerInstance &Compiler) override;

  /// \brief Returns true if the checker should suggest inserting a trailing
  /// comment on the #endif of the header guard. It will use the same name as
  /// returned by getHeaderGuard.
  virtual bool shouldSuggestEndifComment(StringRef Filename);
  /// \brief Returns true if the checker should suggest changing an existing
  /// header guard to the string returned by getHeaderGuard.
  virtual bool shouldFixHeaderGuard(StringRef Filename);
  /// \brief Returns true if the checker should add a header guard to the file
  /// if it has none.
  virtual bool shouldSuggestToAddHeaderGuard(StringRef Filename);
  /// \brief Returns a replacement for endif line with a comment mentioning
  /// \p HeaderGuard. The replacement should start with "endif".
  virtual std::string formatEndIf(StringRef HeaderGuard);
  /// \brief Get the canonical header guard for a file.
  virtual std::string getHeaderGuard(StringRef Filename,
                                     StringRef OldGuard = StringRef()) = 0;
};

} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H
