clang-tools
11.0.0
clang-tools-extra
clang-tidy
google
UnnamedNamespaceInHeaderCheck.cpp
Go to the documentation of this file.
1
//===--- UnnamedNamespaceInHeaderCheck.cpp - 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
#include "
UnnamedNamespaceInHeaderCheck.h
"
10
#include "clang/AST/ASTContext.h"
11
#include "clang/ASTMatchers/ASTMatchFinder.h"
12
#include "clang/ASTMatchers/ASTMatchers.h"
13
14
using namespace
clang::ast_matchers
;
15
16
namespace
clang
{
17
namespace
tidy {
18
namespace
google {
19
namespace
build {
20
21
UnnamedNamespaceInHeaderCheck::UnnamedNamespaceInHeaderCheck(
22
StringRef
Name
,
ClangTidyContext
*Context)
23
:
ClangTidyCheck
(
Name
, Context),
24
RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
25
"HeaderFileExtensions"
, utils::
defaultHeaderFileExtensions
())) {
26
if
(!
utils::parseFileExtensions
(RawStringHeaderFileExtensions,
27
HeaderFileExtensions,
28
utils::defaultFileExtensionDelimiters
())) {
29
llvm::errs() <<
"Invalid header file extension: "
30
<< RawStringHeaderFileExtensions <<
"\n"
;
31
}
32
}
33
34
void
UnnamedNamespaceInHeaderCheck::storeOptions
(
35
ClangTidyOptions::OptionMap
&Opts) {
36
Options
.
store
(Opts,
"HeaderFileExtensions"
, RawStringHeaderFileExtensions);
37
}
38
39
void
UnnamedNamespaceInHeaderCheck::registerMatchers
(
40
ast_matchers::MatchFinder *Finder) {
41
Finder->addMatcher(namespaceDecl(
isAnonymous
()).bind(
"anonymousNamespace"
),
42
this
);
43
}
44
45
void
UnnamedNamespaceInHeaderCheck::check
(
46
const
MatchFinder::MatchResult &Result) {
47
const
auto
*N = Result.Nodes.getNodeAs<NamespaceDecl>(
"anonymousNamespace"
);
48
SourceLocation
Loc
= N->getBeginLoc();
49
if
(!
Loc
.isValid())
50
return
;
51
52
if
(
utils::isPresumedLocInHeaderFile
(
Loc
, *Result.SourceManager,
53
HeaderFileExtensions))
54
diag
(
Loc
,
"do not use unnamed namespaces in header files"
);
55
}
56
57
}
// namespace build
58
}
// namespace google
59
}
// namespace tidy
60
}
// namespace clang
clang::tidy::ClangTidyCheck
Base class for all clang-tidy checks.
Definition:
ClangTidyCheck.h:114
clang::tidy::utils::isPresumedLocInHeaderFile
bool isPresumedLocInHeaderFile(SourceLocation Loc, SourceManager &SM, const FileExtensionsSet &HeaderFileExtensions)
Checks whether presumed location of Loc is in header file.
Definition:
FileExtensionsUtils.cpp:23
clang::ast_matchers
Definition:
AbseilMatcher.h:14
clang::tidy::utils::parseFileExtensions
bool parseFileExtensions(StringRef AllFileExtensions, FileExtensionsSet &FileExtensions, StringRef Delimiters)
Parses header file extensions from a semicolon-separated list.
Definition:
FileExtensionsUtils.cpp:35
clang::tidy::utils::defaultFileExtensionDelimiters
StringRef defaultFileExtensionDelimiters()
Returns recommended default value for the list of file extension delimiters.
Definition:
FileExtensionsUtils.h:48
clang::tidy::ClangTidyCheck::Options
OptionsView Options
Definition:
ClangTidyCheck.h:471
clang::tidy::ClangTidyContext
Every ClangTidyCheck reports errors through a DiagnosticsEngine provided by this context.
Definition:
ClangTidyDiagnosticConsumer.h:76
clang::tidy::google::build::UnnamedNamespaceInHeaderCheck::registerMatchers
void registerMatchers(ast_matchers::MatchFinder *Finder) override
Override this to register AST matchers with Finder.
Definition:
UnnamedNamespaceInHeaderCheck.cpp:39
Name
static constexpr llvm::StringLiteral Name
Definition:
UppercaseLiteralSuffixCheck.cpp:27
clang::tidy::google::build::UnnamedNamespaceInHeaderCheck::storeOptions
void storeOptions(ClangTidyOptions::OptionMap &Opts) override
Should store all options supported by this check with their current values or default values for opti...
Definition:
UnnamedNamespaceInHeaderCheck.cpp:34
clang::tidy::ClangTidyCheck::diag
DiagnosticBuilder diag(SourceLocation Loc, StringRef Description, DiagnosticIDs::Level Level=DiagnosticIDs::Warning)
Add a diagnostic with the check's name.
Definition:
ClangTidyCheck.cpp:55
clang::clangd::isAnonymous
static bool isAnonymous(const DeclarationName &N)
Definition:
AST.cpp:183
clang
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
Definition:
ApplyReplacements.h:27
clang::tidy::google::build::UnnamedNamespaceInHeaderCheck::check
void check(const ast_matchers::MatchFinder::MatchResult &Result) override
ClangTidyChecks that register ASTMatchers should do the actual work in here.
Definition:
UnnamedNamespaceInHeaderCheck.cpp:45
clang::tidy::ClangTidyCheck::OptionsView::store
void store(ClangTidyOptions::OptionMap &Options, StringRef LocalName, StringRef Value) const
Stores an option with the check-local name LocalName with string value Value to Options.
Definition:
ClangTidyCheck.cpp:152
Loc
SourceLocation Loc
'#' location in the include directive
Definition:
IncludeOrderCheck.cpp:37
clang::tidy::utils::defaultHeaderFileExtensions
StringRef defaultHeaderFileExtensions()
Returns recommended default value for the list of header file extensions.
Definition:
FileExtensionsUtils.h:38
UnnamedNamespaceInHeaderCheck.h
clang::tidy::ClangTidyOptions::OptionMap
std::map< std::string, ClangTidyValue > OptionMap
Definition:
ClangTidyOptions.h:111
Generated on Tue Jul 28 2020 16:14:04 for clang-tools by
1.8.16