clang-tools 19.0.0git
HeaderGuard.h
Go to the documentation of this file.
1//===--- HeaderGuard.h - clang-tidy -----------------------------*- C++ -*-===//
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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H
10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H
11
12#include "../ClangTidyCheck.h"
13#include "../utils/FileExtensionsUtils.h"
14
15namespace clang::tidy::utils {
16
17/// Finds and fixes header guards.
19public:
21 : ClangTidyCheck(Name, Context),
22 HeaderFileExtensions(Context->getHeaderFileExtensions()) {}
23
24 void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,
25 Preprocessor *ModuleExpanderPP) override;
26
27 /// Ensure that the provided header guard is a non-reserved identifier.
28 std::string sanitizeHeaderGuard(StringRef Guard);
29
30 /// Returns ``true`` if the check should suggest inserting a trailing comment
31 /// on the ``#endif`` of the header guard. It will use the same name as
32 /// returned by ``HeaderGuardCheck::getHeaderGuard``.
33 virtual bool shouldSuggestEndifComment(StringRef Filename);
34 /// Returns ``true`` if the check should suggest changing an existing header
35 /// guard to the string returned by ``HeaderGuardCheck::getHeaderGuard``.
36 virtual bool shouldFixHeaderGuard(StringRef Filename);
37 /// Returns ``true`` if the check should add a header guard to the file
38 /// if it has none.
39 virtual bool shouldSuggestToAddHeaderGuard(StringRef Filename);
40 /// Returns a replacement for the ``#endif`` line with a comment mentioning
41 /// \p HeaderGuard. The replacement should start with ``endif``.
42 virtual std::string formatEndIf(StringRef HeaderGuard);
43 /// Gets the canonical header guard for a file.
44 virtual std::string getHeaderGuard(StringRef Filename,
45 StringRef OldGuard = StringRef()) = 0;
46
47private:
48 FileExtensionsSet HeaderFileExtensions;
49};
50
51} // namespace clang::tidy::utils
52
53#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_HEADERGUARD_H
llvm::SmallString< 256U > Name
std::string Filename
Filename as a string.
Base class for all clang-tidy checks.
Every ClangTidyCheck reports errors through a DiagnosticsEngine provided by this context.
Finds and fixes header guards.
Definition: HeaderGuard.h:18
std::string sanitizeHeaderGuard(StringRef Guard)
Ensure that the provided header guard is a non-reserved identifier.
virtual bool shouldSuggestToAddHeaderGuard(StringRef Filename)
Returns true if the check should add a header guard to the file if it has none.
virtual bool shouldFixHeaderGuard(StringRef Filename)
Returns true if the check should suggest changing an existing header guard to the string returned by ...
virtual std::string getHeaderGuard(StringRef Filename, StringRef OldGuard=StringRef())=0
Gets the canonical header guard for a file.
HeaderGuardCheck(StringRef Name, ClangTidyContext *Context)
Definition: HeaderGuard.h:20
virtual bool shouldSuggestEndifComment(StringRef Filename)
Returns true if the check should suggest inserting a trailing comment on the #endif of the header gua...
virtual std::string formatEndIf(StringRef HeaderGuard)
Returns a replacement for the #endif line with a comment mentioning HeaderGuard.
void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override
Override this to register PPCallbacks in the preprocessor.
llvm::SmallSet< llvm::StringRef, 5 > FileExtensionsSet