diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy')
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt | 3 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.cpp | 35 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.h (renamed from clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.h) | 16 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.cpp | 61 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.cpp | 54 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.h | 34 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp | 11 |
7 files changed, 140 insertions, 74 deletions
diff --git a/clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt b/clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt index b69a5c06470..30b319e7e5a 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/fuchsia/CMakeLists.txt @@ -1,7 +1,8 @@ set(LLVM_LINK_COMPONENTS support) add_clang_library(clangTidyFuchsiaModule - DefaultArgumentsCheck.cpp + DefaultArgumentsCallsCheck.cpp + DefaultArgumentsDeclarationsCheck.cpp FuchsiaTidyModule.cpp MultipleInheritanceCheck.cpp OverloadedOperatorCheck.cpp diff --git a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.cpp new file mode 100644 index 00000000000..fa814b8c29a --- /dev/null +++ b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.cpp @@ -0,0 +1,35 @@ +//===--- DefaultArgumentsCallsCheck.cpp - clang-tidy-----------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "DefaultArgumentsCallsCheck.h" + +using namespace clang::ast_matchers; + +namespace clang { +namespace tidy { +namespace fuchsia { + +void DefaultArgumentsCallsCheck::registerMatchers(MatchFinder *Finder) { + // Calling a function which uses default arguments is disallowed. + Finder->addMatcher(cxxDefaultArgExpr().bind("stmt"), this); +} + +void DefaultArgumentsCallsCheck::check(const MatchFinder::MatchResult &Result) { + const auto *S = Result.Nodes.getNodeAs<CXXDefaultArgExpr>("stmt"); + if (!S) + return; + + diag(S->getUsedLocation(), + "calling a function that uses a default argument is disallowed"); + diag(S->getParam()->getBeginLoc(), "default parameter was declared here", + DiagnosticIDs::Note); +} + +} // namespace fuchsia +} // namespace tidy +} // namespace clang diff --git a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.h b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.h index 8d26c35a6a9..18dfe0c9cf2 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.h +++ b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCallsCheck.h @@ -1,4 +1,4 @@ -//===--- DefaultArgumentsCheck.h - clang-tidy--------------------*- C++ -*-===// +//===--- DefaultArgumentsCallsCheck.h - clang-tidy --------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_H +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_CALLS_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_CALLS_H #include "../ClangTidyCheck.h" @@ -15,13 +15,13 @@ namespace clang { namespace tidy { namespace fuchsia { -/// Default arguments are not allowed in declared or called functions. +/// Default arguments are not allowed in called functions. /// /// For the user-facing documentation see: -/// http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-default-arguments.html -class DefaultArgumentsCheck : public ClangTidyCheck { +/// http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-default-arguments-calls.html +class DefaultArgumentsCallsCheck : public ClangTidyCheck { public: - DefaultArgumentsCheck(StringRef Name, ClangTidyContext *Context) + DefaultArgumentsCallsCheck(StringRef Name, ClangTidyContext *Context) : ClangTidyCheck(Name, Context) {} void registerMatchers(ast_matchers::MatchFinder *Finder) override; void check(const ast_matchers::MatchFinder::MatchResult &Result) override; @@ -31,4 +31,4 @@ public: } // namespace tidy } // namespace clang -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_H +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_CALLS_H diff --git a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.cpp deleted file mode 100644 index 7f83ac674de..00000000000 --- a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsCheck.cpp +++ /dev/null @@ -1,61 +0,0 @@ -//===--- DefaultArgumentsCheck.cpp - clang-tidy----------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "DefaultArgumentsCheck.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace tidy { -namespace fuchsia { - -void DefaultArgumentsCheck::registerMatchers(MatchFinder *Finder) { - // Calling a function which uses default arguments is disallowed. - Finder->addMatcher(cxxDefaultArgExpr().bind("stmt"), this); - // Declaring default parameters is disallowed. - Finder->addMatcher(parmVarDecl(hasDefaultArgument()).bind("decl"), this); -} - -void DefaultArgumentsCheck::check(const MatchFinder::MatchResult &Result) { - if (const auto *S = - Result.Nodes.getNodeAs<CXXDefaultArgExpr>("stmt")) { - diag(S->getUsedLocation(), - "calling a function that uses a default argument is disallowed"); - diag(S->getParam()->getBeginLoc(), "default parameter was declared here", - DiagnosticIDs::Note); - } else if (const ParmVarDecl *D = - Result.Nodes.getNodeAs<ParmVarDecl>("decl")) { - SourceRange DefaultArgRange = D->getDefaultArgRange(); - - if (DefaultArgRange.getEnd() != D->getEndLoc()) { - return; - } else if (DefaultArgRange.getBegin().isMacroID()) { - diag(D->getBeginLoc(), - "declaring a parameter with a default argument is disallowed"); - } else { - SourceLocation StartLocation = - D->getName().empty() ? D->getBeginLoc() : D->getLocation(); - - SourceRange RemovalRange(Lexer::getLocForEndOfToken( - StartLocation, 0, - *Result.SourceManager, - Result.Context->getLangOpts() - ), - DefaultArgRange.getEnd() - ); - - diag(D->getBeginLoc(), - "declaring a parameter with a default argument is disallowed") - << D << FixItHint::CreateRemoval(RemovalRange); - } - } -} - -} // namespace fuchsia -} // namespace tidy -} // namespace clang diff --git a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.cpp new file mode 100644 index 00000000000..926c8b426df --- /dev/null +++ b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.cpp @@ -0,0 +1,54 @@ +//===--- DefaultArgumentsDeclarationsCheck.cpp - clang-tidy ---------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "DefaultArgumentsDeclarationsCheck.h" + +using namespace clang::ast_matchers; + +namespace clang { +namespace tidy { +namespace fuchsia { + +void DefaultArgumentsDeclarationsCheck::registerMatchers(MatchFinder *Finder) { + // Declaring default parameters is disallowed. + Finder->addMatcher(parmVarDecl(hasDefaultArgument()).bind("decl"), this); +} + +void DefaultArgumentsDeclarationsCheck::check( + const MatchFinder::MatchResult &Result) { + const auto *D = Result.Nodes.getNodeAs<ParmVarDecl>("decl"); + if (!D) + return; + + SourceRange DefaultArgRange = D->getDefaultArgRange(); + + if (DefaultArgRange.getEnd() != D->getEndLoc()) + return; + + if (DefaultArgRange.getBegin().isMacroID()) { + diag(D->getBeginLoc(), + "declaring a parameter with a default argument is disallowed"); + return; + } + + SourceLocation StartLocation = + D->getName().empty() ? D->getBeginLoc() : D->getLocation(); + + SourceRange RemovalRange( + Lexer::getLocForEndOfToken(StartLocation, 0, *Result.SourceManager, + Result.Context->getLangOpts()), + DefaultArgRange.getEnd()); + + diag(D->getBeginLoc(), + "declaring a parameter with a default argument is disallowed") + << D << FixItHint::CreateRemoval(RemovalRange); +} + +} // namespace fuchsia +} // namespace tidy +} // namespace clang diff --git a/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.h b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.h new file mode 100644 index 00000000000..19f16e6b46f --- /dev/null +++ b/clang-tools-extra/clang-tidy/fuchsia/DefaultArgumentsDeclarationsCheck.h @@ -0,0 +1,34 @@ +//===--- DefaultArgumentsDeclarationsCheck.h - clang-tidy -------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_DECLARATIONS_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_DECLARATIONS_H + +#include "../ClangTidyCheck.h" + +namespace clang { +namespace tidy { +namespace fuchsia { + +/// Default parameters are not allowed in declared functions. +/// +/// For the user-facing documentation see: +/// http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-default-parameters.html +class DefaultArgumentsDeclarationsCheck : public ClangTidyCheck { +public: + DefaultArgumentsDeclarationsCheck(StringRef Name, ClangTidyContext *Context) + : ClangTidyCheck(Name, Context) {} + void registerMatchers(ast_matchers::MatchFinder *Finder) override; + void check(const ast_matchers::MatchFinder::MatchResult &Result) override; +}; + +} // namespace fuchsia +} // namespace tidy +} // namespace clang + +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_DEFAULT_ARGUMENTS_DECLARATIONS_H diff --git a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp index 034a30ea38d..c59ec85468c 100644 --- a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp +++ b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp @@ -1,4 +1,4 @@ -//===--- FuchsiaTidyModule.cpp - clang-tidy--------------------------------===// +//===--- FuchsiaTidyModule.cpp - clang-tidy -------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -10,7 +10,8 @@ #include "../ClangTidyModule.h" #include "../ClangTidyModuleRegistry.h" #include "../google/UnnamedNamespaceInHeaderCheck.h" -#include "DefaultArgumentsCheck.h" +#include "DefaultArgumentsCallsCheck.h" +#include "DefaultArgumentsDeclarationsCheck.h" #include "MultipleInheritanceCheck.h" #include "OverloadedOperatorCheck.h" #include "RestrictSystemIncludesCheck.h" @@ -28,8 +29,10 @@ namespace fuchsia { class FuchsiaModule : public ClangTidyModule { public: void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { - CheckFactories.registerCheck<DefaultArgumentsCheck>( - "fuchsia-default-arguments"); + CheckFactories.registerCheck<DefaultArgumentsCallsCheck>( + "fuchsia-default-arguments-calls"); + CheckFactories.registerCheck<DefaultArgumentsDeclarationsCheck>( + "fuchsia-default-arguments-declarations"); CheckFactories.registerCheck<google::build::UnnamedNamespaceInHeaderCheck>( "fuchsia-header-anon-namespaces"); CheckFactories.registerCheck<MultipleInheritanceCheck>( |