1 //===--- ConcatNestedNamespacesCheck.h - clang-tidy--------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_CONCATNESTEDNAMESPACESCHECK_H
10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_CONCATNESTEDNAMESPACESCHECK_H
12 #include "../ClangTidyCheck.h"
13 #include "llvm/ADT/SmallString.h"
14 #include "llvm/ADT/SmallVector.h"
16 namespace clang::tidy::modernize
{
18 using NamespaceName
= llvm::SmallString
<40>;
20 class NS
: public llvm::SmallVector
<const NamespaceDecl
*, 6> {
22 std::optional
<SourceRange
>
23 getCleanedNamespaceFrontRange(const SourceManager
&SM
,
24 const LangOptions
&LangOpts
) const;
25 SourceRange
getReplacedNamespaceFrontRange() const;
26 SourceRange
getNamespaceBackRange(const SourceManager
&SM
,
27 const LangOptions
&LangOpts
) const;
28 SourceRange
getDefaultNamespaceBackRange() const;
29 void appendName(NamespaceName
&Str
) const;
30 void appendCloseComment(NamespaceName
&Str
) const;
33 class ConcatNestedNamespacesCheck
: public ClangTidyCheck
{
35 ConcatNestedNamespacesCheck(StringRef Name
, ClangTidyContext
*Context
)
36 : ClangTidyCheck(Name
, Context
) {}
37 bool unsupportedNamespace(const NamespaceDecl
&ND
, bool IsChild
) const;
38 bool singleNamedNamespaceChild(const NamespaceDecl
&ND
) const;
39 bool isLanguageVersionSupported(const LangOptions
&LangOpts
) const override
{
40 return LangOpts
.CPlusPlus17
;
42 void registerMatchers(ast_matchers::MatchFinder
*Finder
) override
;
43 void check(const ast_matchers::MatchFinder::MatchResult
&Result
) override
;
46 using NamespaceContextVec
= llvm::SmallVector
<NS
, 6>;
48 void reportDiagnostic(const SourceManager
&SM
, const LangOptions
&LangOpts
);
49 NamespaceContextVec Namespaces
;
51 } // namespace clang::tidy::modernize
53 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MODERNIZE_CONCATNESTEDNAMESPACESCHECK_H