1 //===--- UsingNamespaceDirectiveCheck.h - clang-tidy ------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_USINGNAMESPACEDIRECTIVECHECK_H 11 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_USINGNAMESPACEDIRECTIVECHECK_H 12 13 #include "../ClangTidy.h" 14 15 namespace clang { 16 namespace tidy { 17 namespace google { 18 namespace build { 19 20 /// Finds using namespace directives. 21 /// 22 /// https://google.github.io/styleguide/cppguide.html#Namespaces 23 /// 24 /// The check implements the following rule of the Google C++ Style Guide: 25 /// 26 /// You may not use a using-directive to make all names from a namespace 27 /// available. 28 /// 29 /// \code 30 /// // Forbidden -- This pollutes the namespace. 31 /// using namespace foo; 32 /// \endcode 33 /// 34 /// Corresponding cpplint.py check name: `build/namespaces`. 35 class UsingNamespaceDirectiveCheck : public ClangTidyCheck { 36 public: 37 UsingNamespaceDirectiveCheck(StringRef Name, ClangTidyContext *Context) 38 : ClangTidyCheck(Name, Context) {} 39 void registerMatchers(ast_matchers::MatchFinder *Finder) override; 40 void check(const ast_matchers::MatchFinder::MatchResult &Result) override; 41 42 private: 43 static bool isStdLiteralsNamespace(const NamespaceDecl *NS); 44 }; 45 46 } // namespace build 47 } // namespace google 48 } // namespace tidy 49 } // namespace clang 50 51 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_USINGNAMESPACEDIRECTIVECHECK_H 52