11#include "clang/Basic/SourceManager.h"
12#include "clang/Lex/PPCallbacks.h"
13#include "clang/Lex/Preprocessor.h"
14#include "llvm/ADT/StringRef.h"
21 : Check(Check), SM(SM) {}
23 PragmaIntroducerKind Introducer)
override {
24 auto Str = llvm::StringRef(SM.getCharacterData(Loc));
25 if (!Str.consume_front(
"#"))
28 if (!Str.consume_front(
"pragma"))
31 if (Str.starts_with(
"once"))
33 "avoid 'pragma once' directive; use include guards instead");
38 const SourceManager &SM;
43 Preprocessor *ModuleExpanderPP) {
44 PP->addPPCallbacks(std::make_unique<PragmaOnceCallbacks>(
this, SM));
Finds uses of #pragma once and suggests replacing them with standard / include guards (#ifndef/#defin...
void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override
void PragmaDirective(SourceLocation Loc, PragmaIntroducerKind Introducer) override
PragmaOnceCallbacks(AvoidPragmaOnceCheck *Check, const SourceManager &SM)